クロスプラットフォーム デスクトップ アプリケーションを最大化 (フルスクリーンではない)
13295 ワード
macOSの「フルスクリーン」(および一部のLinux)がなければ、苦労することはありません.
Golang と Lorca を使用して、しばらくの間解決策を実現しました.それにもかかわらず、それは
次に、 xgo を使用して、すべての主要なプラットフォーム用にクロスコンパイルできます.
疑問はまだ残っています. Lorca、Chrome DevTools Protocol、または組み込みの最大化を備えたその他のフレームワークを使用していない場合はどうすればよいですか? (ところで、Electron には最大化機能が組み込まれていますが、webview/webview と Neutralino.js には最大化機能がありません...)
Windows と Linux ではフルスクリーンではありません.また、Linux 用にコンパイルする場合、
と、
ところで、私は docker xbuild を見つけました.
Golang と Lorca を使用して、しばらくの間解決策を実現しました.それにもかかわらず、それは
cgo
を使用します.package main
import (
"fmt"
"log"
/*
#cgo darwin LDFLAGS: -framework CoreGraphics
#if defined(__APPLE__)
#include <CoreGraphics/CGDisplayConfiguration.h>
int display_width() {
return CGDisplayPixelsWide(CGMainDisplayID());
}
int display_height() {
return CGDisplayPixelsHigh(CGMainDisplayID());
}
#else
int display_width() {
return 0;
}
int display_height() {
return 0;
}
#endif
*/
"C"
"github.com/zserge/lorca"
)
func main() {
if lorca.LocateChrome() == "" {
lorca.PromptDownload()
log.Fatal(fmt.Errorf("cannot open outside Chrome desktop application"))
} else {
width := int(C.display_width())
height := int(C.display_height())
if width == 0 || height == 0 {
width = 1024
height = 768
}
w, err := lorca.New("https://example.com", "", width, height)
if err != nil {
log.Fatal(err)
}
defer w.Close()
// This does nothing in macOS, BTW.
w.SetBounds(lorca.Bounds{
WindowState: lorca.WindowStateMaximized,
})
<-w.Done()
}
}
次に、 xgo を使用して、すべての主要なプラットフォーム用にクロスコンパイルできます.
BRANCH=${<BRANCH_NAME>:-"master"}
REPO=<REPO_NAME>
$(go env GOPATH)/bin/xgo \
-ldflags="-H windowsgui" \
-branch=BRANCH \
-targets=windows/* \
REPO
if [[ $(go env GOOS) == 'darwin' ]]; then
go build "${PWD##*/}.app"
$(go env GOPATH)/bin/xgo \
-branch=BRANCH \
-targets=linux/* \
REPO
else
$(go env GOPATH)/bin/xgo \
-branch=BRANCH \
-targets=linux/*,darwin/amd64 \
REPO
rm *-darwin*.app
for f in *-darwin*; do mv "$f" "$f.app"; done
fi
疑問はまだ残っています. Lorca、Chrome DevTools Protocol、または組み込みの最大化を備えたその他のフレームワークを使用していない場合はどうすればよいですか? (ところで、Electron には最大化機能が組み込まれていますが、webview/webview と Neutralino.js には最大化機能がありません...)
cgo
におおよその答えがあります.import (
"runtime"
/*
#cgo darwin LDFLAGS: -framework CoreGraphics
#cgo linux pkg-config: x11
#if defined(__APPLE__)
#include <CoreGraphics/CGDisplayConfiguration.h>
int display_width() {
return CGDisplayPixelsWide(CGMainDisplayID());
}
int display_height() {
return CGDisplayPixelsHigh(CGMainDisplayID());
}
#elif defined(_WIN32)
#include <wtypes.h>
int display_width() {
RECT desktop;
const HWND hDesktop = GetDesktopWindow();
GetWindowRect(hDesktop, &desktop);
return desktop.right;
}
int display_height() {
RECT desktop;
const HWND hDesktop = GetDesktopWindow();
GetWindowRect(hDesktop, &desktop);
return desktop.bottom;
}
#else
#include <X11/Xlib.h>
int display_width() {
Display* d = XOpenDisplay(NULL);
Screen* s = DefaultScreenOfDisplay(d);
return s->width;
}
int display_height() {
Display* d = XOpenDisplay(NULL);
Screen* s = DefaultScreenOfDisplay(d);
return s->height;
}
#endif
*/
"C"
)
func getFullscreenSize() (int, int) {
width := int(C.display_width())
height := int(C.display_height())
// Current method of getting screen size in linux and windows makes it fall offscreen
if runtime.GOOS == "linux" || runtime.GOOS == "windows" {
width = width - 50
height = height - 100
}
if width == 0 || height == 0 {
width = 1024
height = 768
}
return width, height
}
Windows と Linux ではフルスクリーンではありません.また、Linux 用にコンパイルする場合、
xgo
は使用できません.代わりに Docker を使用します.ARG ARCH=""
FROM ${ARCH}debian
RUN apt-get update
RUN apt-get install -y --no-install-recommends build-essential
RUN apt-get install -y xorg-dev
RUN apt-get install -y golang git
と、
for arch in amd64 i386
do
docker build --build-arg ARCH=$arch/ -t ${PWD##*/}-$arch .
done
for arch in amd64 i386
do
docker run --rm -v \
"$PWD":/usr/app \
-w /usr/app \
${PWD##*/}-$arch \
go build -o "${PWD##*/}-$arch"
done
ところで、私は docker xbuild を見つけました.
Reference
この問題について(クロスプラットフォーム デスクトップ アプリケーションを最大化 (フルスクリーンではない)), 我々は、より多くの情報をここで見つけました https://dev.to/patarapolw/maximize-not-fullscreen-your-desktop-application-4652テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol