mirror of https://github.com/roytam1/kmeleon.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.1 KiB
77 lines
2.1 KiB
|
|
#include <windows.h> |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
|
|
#include "kmeleon_plugin.h" |
|
#include "CmdLine.h" |
|
|
|
|
|
#define CD_NAVIGATETO 1 |
|
#define CD_GETID 2 |
|
|
|
|
|
int APIENTRY WinMain(HINSTANCE hInstance, |
|
HINSTANCE hPrevInstance, |
|
LPSTR lpCmdLine, |
|
int nCmdShow) |
|
{ |
|
|
|
if (!lpCmdLine || lpCmdLine[0] == 0) { |
|
return 0; |
|
} |
|
|
|
HWND hWndKM = FindWindow("KMeleon Browser Window", NULL); |
|
|
|
if (hWndKM == NULL) { |
|
HKEY hKey; |
|
char kmeleon[1025] = ""; |
|
DWORD dwSize = 1024; |
|
if (RegOpenKey(HKEY_CURRENT_USER, |
|
(LPCTSTR)"Software\\K-Meleon\\K-Meleon\\General", |
|
&hKey) == ERROR_SUCCESS) { |
|
if (RegQueryValueEx(hKey, "InstallDir", NULL, NULL, (LPBYTE)kmeleon, &dwSize) == ERROR_SUCCESS) |
|
strcat(kmeleon, "\\k-meleon.exe"); |
|
RegCloseKey(hKey); |
|
} |
|
ShellExecute(NULL, "open", kmeleon, lpCmdLine, "", SW_SHOWNORMAL); |
|
return 0; |
|
} |
|
|
|
COPYDATASTRUCT cdsSend = {0}; |
|
|
|
cdsSend.dwData = (DWORD) CD_GETID; |
|
cdsSend.cbData = 1 + strlen(lpCmdLine); |
|
cdsSend.lpData = (char*) malloc( cdsSend.cbData ); |
|
strcpy( (char*)cdsSend.lpData, lpCmdLine ); |
|
|
|
int id = SendMessage(hWndKM, WM_COPYDATA, (WPARAM) NULL, (LPARAM) &cdsSend); |
|
|
|
free((void*)cdsSend.lpData); |
|
|
|
|
|
if (id) { |
|
SendMessage(hWndKM, WM_COMMAND, (WPARAM) id, (LPARAM) NULL); |
|
} |
|
else { |
|
CCmdLine cmdline; |
|
cmdline.Initialize(lpCmdLine); |
|
|
|
cmdline.GetSwitch("-P", NULL, TRUE); |
|
cmdline.GetSwitch("-chrome", NULL, TRUE); |
|
cmdline.GetSwitch("-profilesDir", NULL, TRUE); |
|
|
|
cdsSend.dwData = (DWORD) CD_NAVIGATETO; |
|
cdsSend.cbData = 2 + strlen(lpCmdLine); |
|
cdsSend.lpData = (char*) malloc( cdsSend.cbData ); |
|
((char*)cdsSend.lpData)[0] = OPEN_NORMAL; |
|
strcpy( ((char*)cdsSend.lpData) + 1, lpCmdLine); |
|
|
|
SendMessage(hWndKM, WM_COPYDATA, (WPARAM) NULL, (LPARAM) &cdsSend); |
|
|
|
free((void*)cdsSend.lpData); |
|
} |
|
|
|
|
|
return 0; |
|
}
|
|
|