वेब-फेस या निजी इंट्रानेट?
विंडो प्रबंधन ब्राउज़र और ओएस पर है। एचटीएमएल & ईसीएमएस्क्रिप्ट के बारे में कुछ भी कहना नहीं है।
यदि यह सार्वजनिक-सामने वाली वेबसाइट के लिए है, तो बस परेशान न करें - जैसा कि वे कहते हैं, "वेब को तोड़ें नहीं।"
लेकिन मैं वास्तव में चाहता हूं!
यदि यह किसी तरह का कड़ाई से प्रबंधित (इंट्रानेट कहें) एप्लिकेशन के लिए है तो आपको एडॉन्स/एक्सटेंशंस लिखने का सहारा लेना होगा। यह निश्चित रूप से आसान है यदि आप स्वयं को एक ब्राउज़र & प्लेटफ़ॉर्म पर सीमित कर सकते हैं।
संपादित: फ़ायरफ़ॉक्स Win32 पर के लिए उदाहरण ...
यह समाधान जो jsctypes
आंतरिक रूप से उपयोग करता है एक Win32 DLL लोड करने के लिए Firefox के लिए एक कस्टम ऐड-ऑन के रूप में काम करता है। window_focus()
जावास्क्रिप्ट फ़ंक्शन उजागर किया गया है जो आप चाहते हैं जो करता है।
इस समाधान के लिए 3 भागों के होते हैं:
- विशेषाधिकार प्राप्त जावा स्क्रिप्ट कोड लोड करने के लिए/Win32 एपीआई
- हमारे बाहरी DLL के लिए सीपीपी हेडर फाइल बाँध
- हमारे बाहरी DLL के लिए सीपीपी स्रोत फ़ाइल
मैं बाद में दो फ़ाइलों & wmctrl.dll
संकलित साथ MSVC में एक साधारण जीयूआई DLL परियोजना ++ बनाया गया है, पर msvcr100.dll
निर्भर करता है, और Dependency Walker इस्तेमाल किया लगता है "के लिए सादा सी "जेएस-सीटीपीएस द्वारा उपयोग के लिए डीएलएल द्वारा निर्यात किए गए प्रतीकों। उदा। [email protected]@[email protected]
सी ++ एपीआई फ़ंक्शन के लिए "सादा सी" प्रतीक है जिसे wmctrl_find_window
कहा जाता है।
एक चेतावनी के रूप में, यह कोड अस्थायी रूप से उस विंडो के शीर्षक को बदलने में सक्षम है जिस पर ध्यान केंद्रित करने की आवश्यकता है ताकि Win32 API सही फ़ायरफ़ॉक्स विंडो खोजने के लिए आपके डेस्कटॉप पर सभी विंडो की जांच कर सके।
आप यानी विशेषाधिकार प्राप्त मोज़िला मंच API तक पहुंच, की आवश्यकता है: एक Firefox Addon अंदर जावास्क्रिप्ट।
अपने विशेषाधिकार प्राप्त जावा स्क्रिप्ट कोड में:
// get API constants (might already be available)
const {Cc,Ci,Cu} = require("chrome");
// import js-ctypes
var file=null, lib=null, ctypes = {};
Cu.import("resource://gre/modules/ctypes.jsm", ctypes);
var ctypes = ctypes.ctypes;
// build platform specific library path
var filename = ctypes.libraryName("wmctrl"); // automatically adds '.dll'
var comp = "@mozilla.org/file/directory_service;1";
var file = Cc[comp].getService(Ci.nsIProperties).get("CurProcD", Ci.nsIFile);
file.append("browser_code"); // or whereever you put your DLL
file.append(filename);
// get the JavaScript library interface (load the library)
var lib = ctypes.open(file.path);
// wmctrl_find_window: returing unsigned 32bit (long) "window handle"
// takes string "window title".
var find_window = lib.declare(
"[email protected]@[email protected]", /* plain "C" DLL symbol */
ctypes.stdcall_abi, ctypes.uint32_t, /* return type: uint32 */
ctypes.char.ptr); /* parameter: string */
// wmctrl_window_focus: takes unsigned 32bit (long) "window handle".
var window_focus = lib.declare(
"[email protected]@[email protected]", /* plain "C" DLL symbol */
ctypes.stdcall_abi, ctypes.void_t, /* return type: void */
ctypes.uint32_t); /* parameter: uint32 */
wmctrldll.h
#ifdef WMCTRLDLL_EXPORTS
#define WMCTRLDLL_API __declspec(dllexport)
#else
#define WMCTRLDLL_API __declspec(dllimport)
#endif
WMCTRLDLL_API void wmctrl_window_focus (unsigned long wid);
WMCTRLDLL_API unsigned long wmctrl_find_window(char* find_title);
wmctrldll.cpp
typedef struct {
HWND hWnd;
char title[255];
} myWinSpec;
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) {
char String[255];
myWinSpec* to_find = (myWinSpec*) lParam;
// not a window
if (!hWnd) return TRUE;
// not visible
if (!IsWindowVisible(hWnd)) return TRUE;
// no window title
if (!GetWindowTextA(hWnd, (LPSTR)String, 255)) return TRUE;
// no title match
if (strcmp(String, to_find->title) != 0) return TRUE;
to_find->hWnd = hWnd;
return FALSE;
}
WMCTRLDLL_API void wmctrl_window_focus(unsigned long wid) {
SetForegroundWindow((HWND) wid);
}
WMCTRLDLL_API unsigned long wmctrl_find_window(char* find_title) {
myWinSpec to_find;
sprintf_s(to_find.title, sizeof(to_find.title), "%s", find_title);
to_find.hWnd = 0;
EnumWindows(EnumWindowsProc, (LPARAM)&to_find);
return (unsigned long) to_find.hWnd;
}
(1) क्या उपयोगकर्ता सेटिंग्स इस कारण हैं? (2) "इस विधि के रिटर्न से पहले विंडो को सबसे आगे होने की गारंटी नहीं है।" मुझे परवाह नहीं है कि यह कॉल के अंत में सामने है; मैं बस इसे अंत में चाहता हूँ। –
@PaulDraper यदि यह एक सार्वजनिक वेबसाइट के लिए है, तो आप बस (विश्वसनीय रूप से) चाहते हैं कि आप चाहते हैं कि आप पूछ रहे हों। –