|
|
#include <windows.h>
#include "resource.h"
#define ISK_STARTAPP WM_USER + 0x020
#define ISK_CLOSEAPP WM_USER + 0x021
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
HINSTANCE g_hInst; char g_lpCmd[MAX_PATH]; int g_nCount=0; BOOL g_fFirst = FALSE; HANDLE g_hExec;
BOOL _PathRemoveFileSpec(LPSTR pFile) { LPSTR pT; LPSTR pT2 = pFile;
for (pT = pT2; *pT2; pT2 = CharNext(pT2)) { if (*pT2 == '\\') pT = pT2; // last "\" found, (we will strip here)
else if (*pT2 == ':') { // skip ":\" so we don't
if (pT2[1] =='\\') // strip the "\" from "C:\"
pT2++; pT = pT2 + 1; } } if (*pT == 0) return FALSE; // didn't strip anything
//
// handle the \foo case
//
else if ((pT == pFile) && (*pT == '\\')) { // Is it just a '\'?
if (*(pT+1) != '\0') { // Nope.
*(pT+1) = '\0'; return TRUE; // stripped something
} else { // Yep.
return FALSE; } } else { *pT = 0; return TRUE; // stripped something
} }
HRESULT LaunchProcess(LPCSTR pszCmd, HANDLE *phProc, LPCSTR pszDir, UINT uShow) { STARTUPINFO startInfo; PROCESS_INFORMATION processInfo; HRESULT hr = S_OK; BOOL fRet; if(phProc) *phProc = NULL;
// Create process on pszCmd
ZeroMemory(&startInfo, sizeof(startInfo)); startInfo.cb = sizeof(startInfo); startInfo.dwFlags |= STARTF_USESHOWWINDOW; startInfo.wShowWindow = (WORD) uShow; fRet = CreateProcess(NULL, (LPSTR) pszCmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, pszDir, &startInfo, &processInfo); if(!fRet) return E_FAIL;
if(phProc) *phProc = processInfo.hProcess; else CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread); return S_OK; }
//=--------------------------------------------------------------------------=
// Function name here
//=--------------------------------------------------------------------------=
// Function description
//
// Parameters:
//
// Returns:
//
// Notes:
//
HRESULT LaunchAndWait(LPSTR pszCmd, HANDLE hAbort, HANDLE *phProc, LPSTR pszDir, UINT uShow) { HRESULT hr = S_OK;
hr = LaunchProcess(pszCmd, phProc, pszDir, uShow); if(SUCCEEDED(hr)) { DWORD dwRet; HANDLE pHandles[2]; BOOL fQuit = FALSE;
pHandles[0] = *phProc; if(hAbort) pHandles[1] = hAbort;
while(!fQuit) { dwRet = MsgWaitForMultipleObjects(hAbort ? 2 : 1, pHandles, FALSE, INFINITE, QS_ALLINPUT); // Give abort the highest priority
if(dwRet == WAIT_OBJECT_0) { fQuit = TRUE; } else if((dwRet == WAIT_OBJECT_0 + 1) && hAbort) { // Any abort work?
hr = E_ABORT; fQuit = TRUE; } else { MSG msg; // read all of the messages in this next loop
// removing each message as we read it
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { // if it's a quit message we're out of here
if (msg.message == WM_QUIT) { TerminateProcess(pHandles[0],0); fQuit = TRUE; } else { // otherwise dispatch it
DispatchMessage(&msg); } // end of PeekMessage while loop
} } } } return hr; }
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { char szCDPath[MAX_PATH]; char * szCheckRunOnce; char szMsg[128]; char szPath[MAX_PATH]; char szWinPath[MAX_PATH]; char szTest[MAX_PATH]; long lResult; HKEY hkRunOnce; DWORD dwTest;
switch( msg ) { case WM_CREATE: ShowWindow( hWnd, SW_HIDE );
lstrcpy( szCDPath, g_lpCmd); _PathRemoveFileSpec( szCDPath ); if(LaunchAndWait(g_lpCmd, NULL, &g_hExec, szCDPath, SW_SHOWNORMAL)==E_FAIL) { TCHAR szMessage[MAX_PATH]; TCHAR szTitle[MAX_PATH];
LoadString( g_hInst, IDS_CDMESSAGE, szMessage, MAX_PATH ); LoadString( g_hInst, IDS_CDTITLE, szTitle, MAX_PATH );
MessageBox(NULL,szMessage,szTitle,MB_OK); }
SendMessage(hWnd,WM_CLOSE,(WPARAM) 0,(LPARAM) 0);
break;
case ISK_STARTAPP: if( !g_fFirst ) g_fFirst = TRUE; g_nCount++; // wsprintf( szMsg, "Start App\ng_nCount++\ng_nCount: %d", g_nCount );
// MessageBox( NULL, szMsg, "ISK3RO", MB_OK | MB_SETFOREGROUND );
break;
case ISK_CLOSEAPP: g_nCount--; if( g_fFirst ) { if( g_nCount < 1 ) PostQuitMessage(0); } wsprintf( szMsg, "Close App\ng_nCount--\ng_nCount: %d", g_nCount ); // MessageBox( NULL, szMsg, "ISK3RO", MB_OK | MB_SETFOREGROUND );
break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc( hWnd, msg, wParam, lParam ); }
return 1; }
void RegisterMe( ) { WNDCLASS wc; MSG msg;
wc.style = 0; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = wc.cbWndExtra = 0; wc.hInstance = g_hInst; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = NULL; wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "ISK3RO";
RegisterClass(&wc);
CreateWindow( "ISK3RO", "Isk3Ro", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 0, 0, 30, 30, NULL, NULL, g_hInst, NULL );
while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); }
}
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow ) { char szCDPath[MAX_PATH]; HWND hwndIE=NULL; char *pParams; int i; int len; BOOL bIsOk; HKEY hkCheckCD;
g_hInst = hInst;
lstrcpy( g_lpCmd, lpCmdLine );
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion",0,KEY_READ|KEY_WRITE,&hkCheckCD)==ERROR_SUCCESS) { HKEY hkTips; TCHAR szClass[64]; char szCheckCD[MAX_PATH]; DWORD dwType=REG_SZ; DWORD dwSize; DWORD dwRes;
dwSize = sizeof(szCheckCD); if(RegQueryValueEx(hkCheckCD,"DeleteWelcome",NULL,&dwType,szCheckCD,&dwSize)==ERROR_SUCCESS) { DeleteFile(szCheckCD); RegDeleteValue(hkCheckCD, "DeleteWelcome");
if(RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Tips", 0, szClass, REG_OPTION_NON_VOLATILE,KEY_READ|KEY_WRITE,NULL,&hkTips,&dwRes) == ERROR_SUCCESS) { DWORD K0 = 0; RegSetValueEx(hkTips, "ShowIE4", 0, REG_DWORD,(LPBYTE) &K0, 4); RegCloseKey(hkTips); } }
dwSize = sizeof(szCheckCD); if(RegQueryValueEx(hkCheckCD,"CDForcedOn",NULL,&dwType,szCheckCD,&dwSize)==ERROR_SUCCESS) { RegDeleteValue(hkCheckCD,"CDForcedOn");
if(RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Tips", 0, szClass, 0,KEY_READ|KEY_WRITE,NULL,&hkTips,NULL) == ERROR_SUCCESS) { DWORD K0 = 0; RegSetValueEx(hkTips, "ShowIE4", 0, REG_DWORD,(LPBYTE) &K0, 4); RegCloseKey(hkTips); } }
RegCloseKey(hkCheckCD); }
RegisterMe( );
return TRUE; }
int _stdcall ModuleEntry(void) { int i; STARTUPINFO si; LPSTR pszCmdLine = GetCommandLine();
if ( *pszCmdLine == '\"' ) { /*
* Scan, and skip over, subsequent characters until * another double-quote or a null is encountered. */ while ( *++pszCmdLine && (*pszCmdLine != '\"') ) ; /*
* If we stopped on a double-quote (usual case), skip * over it. */ if ( *pszCmdLine == '\"' ) pszCmdLine++; } else { while (*pszCmdLine > ' ') pszCmdLine++; }
/*
* Skip past any white space preceeding the second token. */ while (*pszCmdLine && (*pszCmdLine <= ' ')) { pszCmdLine++; }
si.dwFlags = 0; GetStartupInfoA(&si);
i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine, si.dwFlags & STARTF_USESHOWWINDOW ? si.wShowWindow : SW_SHOWDEFAULT); ExitProcess(i); return i; // We never comes here.
}
|