Programm ohne Fenster?
-
also ich schnalls nicht .... vermutlich bin ich auch noch zu neu für die materie.
aber ich würde auch gerne mein fenster unterdrücken und zwar ganz ohne task oder tray-symbol.
wenn ich den oben geposteten code nutze, bekomme ich fehler ohne plan warum:#include <windows.h> INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR cmdLine, int show) { int i; i = 5; return 0; }
kann mir mal jemand sagen warum ? ich habe VC++2008 mit SP1
danke!
-
Du musst schon dabei schreiben welche Fehler das sind
-
[code]1>------ Erstellen gestartet: Projekt: shellunterdrücken3, Konfiguration: Debug Win32 ------ 1>Kompilieren... 1>main.cpp 1>c:\users\docmann\documents\visual studio 2008\projects\shellunterdrücken3\shellunterdrücken3\main.cpp(4) : error C2731: 'WinMain': Überladen der Funktion nicht möglich 1> c:\users\docmann\documents\visual studio 2008\projects\shellunterdrücken3\shellunterdrücken3\main.cpp(3): Siehe Deklaration von 'WinMain' 1>Das Buildprotokoll wurde unter "file://c:\Users\docmann\Documents\Visual Studio 2008\Projects\shellunterdrücken3\shellunterdrücken3\Debug\BuildLog.htm" gespeichert. 1>shellunterdrücken3 - 1 Fehler, 0 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
ich hab schon einiges versucht aber irgendwie scheint es ja an der API zu liegen und da hab ich nicht wirklich viel plan...
-
Du hast bestimmt ein "Win32 Project" in Visual Studio erzeugt, sämtlichen vorgegeben Quelltext weggelöscht und dann Copy+Paste gemacht?
Erzeugt man in Visual Studio ein "Win32 Project" heisst die WinMain dort nämlich anders (bzw. es gibt bereits eine WinMain, welche aber dann _tWinMain aufruft):
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
-
Bei Code::Blocks kann man in Target options "Type" jederzeit zu GUI application ändern, dann wird kein Fenster erzeugt und du kannst trotzdem main() benutzen.
Sicherlich gibt's was ähnliches auch bei VC++.
-
geeky schrieb:
Du hast bestimmt ein "Win32 Project" in Visual Studio erzeugt, sämtlichen vorgegeben Quelltext weggelöscht und dann Copy+Paste gemacht?
Erzeugt man in Visual Studio ein "Win32 Project" heisst die WinMain dort nämlich anders (bzw. es gibt bereits eine WinMain, welche aber dann _tWinMain aufruft):
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
nein, eigentlich hab ich mein project als konsolenanwendung erzeugt.
mein wunsch das fenster zu unterdrücken bzw gar nicht zu erzeugen bezieht sich auf eine windows konsolenanwendung. falls es im syntax einen unterschied zum win32 project gibt, bin auch gerne offen für beide wege
-
Athar schrieb:
Bei Code::Blocks kann man in Target options "Type" jederzeit zu GUI application ändern, dann wird kein Fenster erzeugt und du kannst trotzdem main() benutzen.
Sicherlich gibt's was ähnliches auch bei VC++.aha, du scheinst davon ausgegangen zu sein, das ich eine konsolenanwendung erzeugen wollte, richtig ?
wobei ich keine ahnung habe wo ich "Code::Blocks" finde?
EDIT: ich hab jetzt was hinbekommen was mir noch nciht so ganz gefällt:
ShowWindow(FindWindowA("ConsoleWindowClass",NULL),0);
leider poppt das fenster immernoch für ne knappe skunde auf
-
Erzeuge einfach ein "Win32 Project" lösch alles aus der _tWinMain()-Funktion, die er dir beim "Win32 Project" erzeugt, raus und mach dann in der _TWinMain() halt deinen Krempel
(Man kann zwar eine Konsolenawendung auch switchen, aber ich weiss nicht auswendig wo welche Einstellungen das sind...)
btw:
Mit ShowWindow() das Konsolenfenster ausblenden ist meiner Meinung nach Fusch...
-
hab ich gemacht .... jetzt gehts nicht mehr...
das hab ich eingefügt ... vermutlich muss ich ander befehle für windows nehmen oder ?
#include <iostream> #include <windows.h> #include <urlmon.h> #pragma comment(lib, "urlmon.lib") URLDownloadToFile(NULL, TEXT("http://www.google.com/index.html"), TEXT("update.exe"), NULL, NULL); ShellExecute(NULL, TEXT("open"), TEXT ("update.exe"), NULL, NULL, SW_SHOWNORMAL);
-
Und wo ist da jetzt ne _tWinMain() ?!
-
natürlich hab ich das so gemacht wie du gesagt hast ....
1. projekt geöffnet
2. die includes ausserhalb der _tWinMain() eingefügt (logisch)
3. den "rest" innerhalb von _tWinMain()ich wollte nicht den ganzen krams der bei einem win32-projekt erzeugt wird posten, weil ich dachte es sei verständlich. (oder sollte ich das auch löschen?)
aber hier nochmal der obere teil von dem programm:
#include <iostream> #include <windows.h> #include <urlmon.h> #include "stdafx.h" #include updater-als-win32.h" #pragma comment(lib, "urlmon.lib") #define MAX_LOADSTRING 100 // Globale Variablen: HINSTANCE hInst; // Aktuelle Instanz TCHAR szTitle[MAX_LOADSTRING]; // Titelleistentext TCHAR szWindowClass[MAX_LOADSTRING]; // Klassenname des Hauptfensters // Vorwärtsdeklarationen der in diesem Codemodul enthaltenen Funktionen: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { URLDownloadToFile(NULL, TEXT("http://www.google.com/index.html"), TEXT("update.exe"), NULL, NULL); // edit the URL here. Sleep(4000); ShellExecute(NULL, TEXT("open"), TEXT ("update.exe"), NULL, NULL, SW_SHOWNORMAL); return 0; }
-
WhiteLion schrieb:
#include updater-als-win32.h" to run." << endl;
Da sind aber ein paar Flüchtigkeitsfehler drin (abgetippt? Zu schnell kopiert?). Du solltest hier am besten den Code immer genauso posten, wie er bei dir im Editor ist. Sonst erschwerst du die Fehlersuche nur unnötig, indem du neue Fehler "hinzudichtest".
-
Deine komplette *.cpp könnte z.B. so aussehen:
#include "stdafx.h" // Hier wird "windows.h" bereits eingebunden // Diesen Krempel könnte man auch nach "stdafx.h" schieben: #include <iostream> #include <urlmon.h> #include "shellapi.h" // für ShellExecute #pragma comment(lib, "urlmon.lib") int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { URLDownloadToFile(NULL, TEXT("http://www.google.com/index.html"), TEXT("quelltext.txt"), NULL, NULL); ShellExecute(NULL, TEXT("open"), TEXT ("quelltext.txt"), NULL, NULL, SW_SHOWNORMAL); return 0; }
-
_matze schrieb:
WhiteLion schrieb:
#include updater-als-win32.h" to run." << endl;
Da sind aber ein paar Flüchtigkeitsfehler drin (abgetippt? Zu schnell kopiert?). Du solltest hier am besten den Code immer genauso posten, wie er bei dir im Editor ist. Sonst erschwerst du die Fehlersuche nur unnötig, indem du neue Fehler "hinzudichtest".
ja, war ein copy and paste ..... wollte es so kurz wie möglich halten, wenn mir hier schon geholfen wir
-
geeky schrieb:
Deine komplette *.cpp könnte z.B. so aussehen:
#include "stdafx.h" // Hier wird "windows.h" bereits eingebunden // Diesen Krempel könnte man auch nach "stdafx.h" schieben: #include <iostream> #include <urlmon.h> #include "shellapi.h" // für ShellExecute #pragma comment(lib, "urlmon.lib") int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { URLDownloadToFile(NULL, TEXT("http://www.google.com/index.html"), TEXT("quelltext.txt"), NULL, NULL); ShellExecute(NULL, TEXT("open"), TEXT ("quelltext.txt"), NULL, NULL, SW_SHOWNORMAL); return 0; }
hey danke
es funktioniert1000 dank!
-
Der aus dem Westen ... schrieb:
Ich will:
- ein triviales Programm, dass im Hintergrund laufen soll
- , dass man nicht mal bemerkt, dass es läuft
- keine Fenstern oder Nachrichtenbehandlung
- den Code ganz klein halten.Um kein Fenstern zu bekommen, will ich die Funktion WinMain aufrufen. Soweit ich weiss, ist diese in der Headerdatei <windows.h> deklariert, also müsste ich diese einbinden. Je mehr ich aber einbinde, desto grösser mein Quell- und der Maschinencode. Um Punkt 1-3 zu erfüllen, müsste ich also gegen Punkt 4 verstossen, aber das tue ich nicht. Deshalb meine Frage: Gibt es die Möglichkeit, alle meine Kriterien zu erfüllen?
56KB sind dir also zuviel oda watt? Musstu Assembler nehmen, Modell Small oder Flat oder so, weiß ich jetzt nicht google mal.
-
So sollts auch klappen:
ganz normale Konsolenanwendung erstellen und kompilieren
dann mit hilfe von rbSuBSys (hier zu finden) http://dcla.rkhb.de/win32/AttachConsole.html
nachträglich das Subsystem auf Windows_gui umschalten.
oder direkt in der IDE das Subsystem umstellen.
-
edit: Zu spaet
-
glaub das sollte reichen als lösung teilweise
leider hatt er immer noch die windows.h mit drinne sollt aber ned so tragisch sein#pragma comment(linker, "/SUBSYSTEM:WINDOWS") #define _WIN32_WINNT 0x0500 #include <windows.h> #include <iostream> #include <string> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { deincode!!!!!!!! }
-
staun0r schrieb:
56KB sind dir also zuviel oda watt? Musstu Assembler nehmen, Modell Small oder Flat oder so, weiß ich jetzt nicht google mal.
gabs nicht auch noch sowas wie .model tiny
lg lolo