main.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #include "main.h"
  2. #include "Fenster.h"
  3. #include <tlhelp32.h>
  4. #include "Punkt.h"
  5. #include "Bildschirm.h"
  6. #include "TextFeld.h"
  7. #include "DateiSystem.h"
  8. #include "Text.h"
  9. #include "Fortschritt.h"
  10. #include "Schrift.h"
  11. #include "Datei.h"
  12. #include "Maus.h"
  13. #include "Globals.h"
  14. #include <tchar.h>
  15. using namespace Framework;
  16. Bildschirm *screen;
  17. TextFeld *output;
  18. FBalken *balken;
  19. bool exitB2 = 0;
  20. bool warten = 0;
  21. WFenster *fenster;
  22. void textOut( const char *txt )
  23. {
  24. output->zText()->anhängen( txt );
  25. if( output->zText()->anzahlVon( '\n' ) > 7 )
  26. output->zText()->löschen( 0, output->zText()->positionVon( '\n', output->zText()->anzahlVon( '\n' ) - 7 ) + 1 );
  27. screen->render();
  28. }
  29. void fensterSchließenME( WFenster *f )
  30. {
  31. textOut( "Vorgang wird beendet...\n" );
  32. exitB2 = 1;
  33. if( !warten )
  34. PostQuitMessage( 0 );
  35. };
  36. DWORD WINAPI übernehmen( void *args )
  37. {
  38. warten = 1;
  39. Datei *liste = new Datei();
  40. liste->setDatei( "data/update/unable/list.patch" );
  41. if( !liste->existiert() )
  42. {
  43. liste->release();
  44. DateiLöschen( new Text( "data/update/download" ) );
  45. balken->setAktionAnzahl( 1 );
  46. balken->aktionPlus( 1 );
  47. textOut( "Vorgang abgeschlossen\n" );
  48. warten = 0;
  49. StopNachrichtenSchleife( fenster->getFensterHandle() );
  50. return 0;
  51. }
  52. liste->öffnen( D_Style::lesen );
  53. int count = 0;
  54. Text *zeile = liste->leseZeile();
  55. while( zeile )
  56. {
  57. count++;
  58. zeile->release();
  59. zeile = liste->leseZeile();
  60. }
  61. liste->schließen();
  62. balken->setAktionAnzahl( count );
  63. for( int i = 0; i < count; i++ )
  64. {
  65. liste->öffnen( D_Style::lesen );
  66. zeile = liste->leseZeile();
  67. if( !zeile )
  68. break;
  69. char aktion = zeile->getText()[ 0 ];
  70. switch( aktion )
  71. {
  72. case 1: // Datei erstellen
  73. {
  74. Text *pfad = zeile->getTeilText( 1, zeile->getLänge() - 1 );
  75. textOut( "Erstelle: " );
  76. textOut( pfad->getText() );
  77. textOut( "\n" );
  78. DateiLöschen( pfad->getThis() );
  79. DateiPfadErstellen( pfad );
  80. }
  81. break;
  82. case 2: // Datei umbenennen
  83. {
  84. Text *pfad1 = zeile->getTeilText( 1, zeile->positionVon( "=>" ) );
  85. Text *pfad2 = zeile->getTeilText( zeile->positionVon( "=>" ) + 2, zeile->getLänge() - 1 );
  86. textOut( "Ersetze: " );
  87. textOut( pfad1->getText() );
  88. textOut( "\n" );
  89. DateiLöschen( pfad1->getThis() );
  90. DateiUmbenennen( pfad2, pfad1 );
  91. }
  92. break;
  93. case 3: // Datei löschen
  94. {
  95. Text *pfad = zeile->getTeilText( 1, zeile->getLänge() - 1 );
  96. textOut( "Lösche: " );
  97. textOut( pfad->getText() );
  98. textOut( "\n" );
  99. DateiLöschen( pfad->getThis() );
  100. }
  101. break;
  102. }
  103. Datei *liste2 = new Datei();
  104. liste2->setDatei( "data/update/unable/list.patch$" );
  105. liste2->öffnen( D_Style::schreiben );
  106. for( __int64 ii = liste->getLPosition(); ii < liste->getGröße(); ii++ )
  107. {
  108. char c = 0;
  109. liste->lese( &c, 1 );
  110. liste2->schreibe( &c, 1 );
  111. }
  112. liste->schließen();
  113. liste2->schließen();
  114. liste->löschen();
  115. liste2->umbenennen( "data/update/unable/list.patch" );
  116. liste2->release();
  117. balken->aktionPlus();
  118. if( exitB2 )
  119. {
  120. liste->release();
  121. warten = 0;
  122. StopNachrichtenSchleife( fenster->getFensterHandle() );
  123. return 0;
  124. }
  125. }
  126. liste->schließen();
  127. liste->release();
  128. DateiLöschen( new Text( "data/update/download" ) );
  129. DateiLöschen( new Text( "data/update/unable" ) );
  130. textOut( "Vorgang abgeschlossen\n" );
  131. warten = 0;
  132. StopNachrichtenSchleife( fenster->getFensterHandle() );
  133. return 0;
  134. }
  135. int LTStart Framework::Start( Startparam p )
  136. {
  137. Framework::initFramework();
  138. WNDCLASS wc = F_Normal( p.hinst );
  139. wc.lpszClassName = "Übernehme Änderungen...";
  140. fenster = new WFenster();
  141. fenster->erstellen( WS_SYSMENU, wc );
  142. fenster->setGröße( 310, 185 );
  143. fenster->setPosition( Bildschirmmitte( fenster->getThis() ) );
  144. fenster->setVSchließAktion( fensterSchließenME );
  145. fenster->setAnzeigeModus( 1 );
  146. screen = new Bildschirm( fenster->getThis() );
  147. screen->setBackBufferGröße( new Punkt( 300, 150 ) );
  148. screen->update();
  149. screen->render();
  150. fenster->setBildschirm( screen->getThis() );
  151. LTDSDatei *schriftD = new LTDSDatei();
  152. schriftD->setPfad( new Text( "data/schriften/normal.ltds" ) );
  153. schriftD->leseDaten();
  154. Schrift *schrift = schriftD->ladeSchrift();
  155. schriftD->release();
  156. output = new TextFeld();
  157. output->setSchriftZ( schrift->getThis() );
  158. output->setStyle( TF_Style::Sichtbar | TF_Style::Mehrzeilig );
  159. output->setSchriftFarbe( 0xFFFFFFFF );
  160. output->setGröße( 300, 130 );
  161. output->setText( "Initialisierung...\n" );
  162. screen->addMember( output );
  163. balken = new FBalken();
  164. balken->setSchriftZ( schrift );
  165. balken->setStyle( FB_Style::Sichtbar | FB_Style::Rahmen | FB_Style::Prozent | FB_Style::FFarbe | FB_Style::L_R );
  166. balken->setGröße( 300, 20 );
  167. balken->setPosition( 0, 130 );
  168. balken->setRFarbe( 0xFFFFFFFF );
  169. balken->setSFarbe( 0xFFFFFFFF );
  170. balken->setFBgFarbe( 0xFF00FF00 );
  171. balken->reset();
  172. balken->setSGröße( 12 );
  173. screen->addMember( balken );
  174. screen->render();
  175. PROCESSENTRY32 entry;
  176. entry.dwSize = sizeof(PROCESSENTRY32);
  177. HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
  178. Text *startexe = new Text( "start.exe" );
  179. if( Process32First( snapshot, &entry ) == TRUE )
  180. {
  181. while( Process32Next( snapshot, &entry ) == TRUE )
  182. {
  183. if( startexe->istGleich( entry.szExeFile ) )
  184. {
  185. HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID );
  186. WaitForSingleObject( hProcess, INFINITE );
  187. CloseHandle( hProcess );
  188. }
  189. }
  190. }
  191. startexe->release();
  192. CloseHandle( snapshot );
  193. HANDLE mutex = OpenMutex( MUTEX_ALL_ACCESS, false, "KSG_Client" );
  194. DWORD threadId;
  195. CreateThread( NULL, 0, übernehmen, 0, 0, &threadId);
  196. StartNachrichtenSchleife();
  197. balken->release();
  198. output->release();
  199. screen->release();
  200. fenster->setBildschirm( 0 );
  201. fenster->zerstören();
  202. fenster->release();
  203. ReleaseMutex( mutex );
  204. PROCESS_INFORMATION prozessinfo1;
  205. STARTUPINFO startinfo1;
  206. startinfo1.cb = sizeof( STARTUPINFOW );
  207. ZeroMemory( &startinfo1, sizeof( STARTUPINFOW ) );
  208. if( CreateProcess( 0, "start.exe", 0, 0, 0, 0, 0, 0, &startinfo1, &prozessinfo1 ) == 1 )
  209. {
  210. CloseHandle( prozessinfo1.hThread );
  211. }
  212. return 0;
  213. }