Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
while(1)
{
HPipe = CreateFile("\\\\.\\pipe\\pipe1", GENERIC_READ |
GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(HPipe != INVALID_HANDLE_VALUE)
{
Edit1->Text = "Pipe successfully opened";
break;
}
if(!WaitNamedPipe("\\\\.\\pipe\\pipe1", 5000))
{
Edit1->Text = "Could not open pipe";
break;
}
while(1)
{
if(!WaitNamedPipe("\\\\.\\pipe\\pipe1", 5000))
{
Edit1->Text = "Could not open pipe";
break;
}
}
HANDLE HPipe;
HPipe = CreateNamedPipe("\\\\.\\pipe\\pipe1", PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE |
PIPE_WAIT, 1, 500, 500, 30000, NULL);
String datei = "Test.exe";
// system(datei.c_str());
bool fConnected;
fConnected = ConnectNamedPipe(HPipe, NULL) ?
true : (GetLastError() == ERROR_PIPE_CONNECTED);
if(fConnected)
{
unsigned long BytesRead;
char chRequest[100];
bool fSuccess;
while(1)
{
fSuccess = ReadFile(HPipe,chRequest,100+1,&BytesRead,NULL);
if(!fSuccess || BytesRead == 0)
break;
}
Label1->Caption = chRequest;
}
else Label1->Caption = GetLastError();
HANDLE HPipe;
while(1)
{
HPipe = CreateFile("\\\\.\\pipe\\pipe1", GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, 0, NULL);
if(HPipe != INVALID_HANDLE_VALUE)
{
Label1->Caption = "Pipe successfully opened";
break;
}
if(!WaitNamedPipe("\\\\.\\pipe\\pipe1", 5000))
{
Label1->Caption = GetLastError();
break;
}
}
bool fSuccess;
unsigned long dwMode = PIPE_READMODE_MESSAGE;
fSuccess = SetNamedPipeHandleState(HPipe, &dwMode, NULL, NULL);
if(!fSuccess)
Label2->Caption = "SetNamedPipeHandleState failed";
unsigned long WrittenBytes;
fSuccess = WriteFile(HPipe,"Dies ist ein Test",17+1,&WrittenBytes,NULL);
if(!fSuccess)
Label3->Caption = "WriteFile failed";
CloseHandle(HPipe);
BOOL ProcessCommandLine(char * pcCommandLine)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe, hWritePipe;
DWORD dwWaitResult = WAIT_TIMEOUT, dwBytesRead, dwExitCode, dwSizeLow, dwSizeHigh, dwError;
char cReadLine[MAX_LINE_LENGTH];
BOOL bDoRead = TRUE, bOK = TRUE;
MSG AppMsg;
LPVOID lpEnvironment = NULL;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
//Pipes erzeugen
sa.nLength=sizeof(sa);
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
bOK = CreatePipe(&hReadPipe, &hWritePipe, &sa, 1048576);
if(!bOK)
{
//FEHLER
dwError = GetLastError();
bOK = FALSE;
goto PROCESS_END_NOPIPE; //ja, ich weiß: niemals goto verwenden. Wollte aber nicht so viele if's schachteln
}
//Pipes eintragen
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = hWritePipe;
si.hStdError = hWritePipe;
si.wShowWindow = SW_SHOWMINNOACTIVE;
//Prozess starten
bOK = CreateProcess(NULL,
pcCommandLine,
NULL,
NULL,
TRUE,
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
lpEnvironment,
NULL,
&si,
&pi);
if(!bOK)
{
//FEHLER
dwError = GetLastError();
goto PROCESS_END_NOPROC; //ja, ich weiß: niemals goto verwenden. Wollte aber nicht so viele if's schachteln
}
//Auf Ende warten und Messages lesen
while(dwWaitResult != WAIT_OBJECT_0)
{
dwWaitResult = WaitForSingleObject(pi.hProcess, 10);
while(dwSizeLow = GetFileSize(hReadPipe, &dwSizeHigh))
{
ZeroMemory(cReadLine, MAX_LINE_LENGTH);
if(bDoRead = ReadFile(hReadPipe, cReadLine, MAX_LINE_LENGTH - 1, &dwBytesRead, NULL))
{
if(dwBytesRead)
{
//hier können die Daten in cReadLine ausgewertet werden
}
}
else
{
dwBytesRead = GetLastError();
}
}
//Applikations-Messagequeue verarbeiten
if(PeekMessage(&AppMsg, 0, 0, 0, PM_NOREMOVE))
{
GetMessage(&AppMsg, 0, 0, 0);
TranslateMessage(&AppMsg);
DispatchMessage(&AppMsg);
}
}
bOK = GetExitCodeProcess(pi.hProcess, &dwExitCode);
if(bOK)
{
if(dwExitCode != 0)
{
bOK = FALSE;
}
}
else
{
//FEHLER
dwError = GetLastError();
bOK = FALSE;
}
//Close handles
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
PROCESS_END_NOPROC:
CloseHandle(hWritePipe);
CloseHandle(hReadPipe);
if(lpEnvironment != NULL)
delete[] lpEnvironment;
PROCESS_END_NOPIPE:
return bOK;
}