Avatar billede arved Nybegynder
07. september 2003 - 16:42 Der er 35 kommentarer

Autorun til alle windows

Jeg er en VB programmør som nu er færdig med et projekt, dette project skal ligge på en cd, af den grund vil jeg gerne inkludere et autorun program.
Da visual basic ikke helt er egnet til autorun stiller jeg spørgsmålet her.
Programmet skal indeholde disse links
* Installationen af programmet
* Installationen af IE6
* Starte stifinder (på cd'en)

Jeg har lavet et hurtigt billede af hvordan det gerne skulle se ud: http://web.imaginary.dk/autorun.jpg
De røde firkanter er billeder: det kunne være ganz fantastisk hvis programmet loadede billederne fra det dir hvor programmet ligger (nemmere for en som mig at skifte billederne)

Jeg er villig til at give masser af flere point end annonceret
Avatar billede arved Nybegynder
07. september 2003 - 16:44 #1
Jeg søger mfc eller win32 api kode, eller hvad der virker uden at der skal installeres noget (skal kunne køre på Win98, NT, ME, 2000, XP, 2003)
Avatar billede tosssen Nybegynder
07. september 2003 - 16:47 #2
Lytter med
Avatar billede tfa_dk Nybegynder
07. september 2003 - 20:30 #3
Avatar billede tfa_dk Nybegynder
07. september 2003 - 20:35 #4
http://www.eksperten.dk/spm/186729 eller søg selv på autirun der er mange gode indlæg om emnet.
Avatar billede arved Nybegynder
07. september 2003 - 21:54 #5
Ja, men de omhandler filen autorun.inf og hvordan man starter et program/html fil med den, det ved jeg hvordan man gør (fordi jeg har læst de artikler), det jeg leder efter er programmet der skal startes - og her mener jeg ikke at en html fil er nok.
Avatar billede bertelbrander Novice
07. september 2003 - 23:56 #6
Ønsker du et program eller at få at vide hvordan du selv laver det?
Det burde være rimelig let at lave, men det vil hjælpe hvis du selv kan rette lidt og kompilere.
Avatar billede arved Nybegynder
08. september 2003 - 00:30 #7
I en ideel verden ville jeg gerne have et program, gerne incl source koden (jeg har en c++ kompiler (VC++ 7(.net)))
Avatar billede arved Nybegynder
08. september 2003 - 00:37 #8
Jeg ved intet om c++ windows programmering, så hvad du kalder en let opgave var da jeg kiggede (og prøvede) en overskuelig opgave
Avatar billede arved Nybegynder
08. september 2003 - 02:16 #9
der menes selvfølgelig uoverskuelig opgave (jeg er træt)
Avatar billede driis Nybegynder
08. september 2003 - 15:36 #10
Hvis man har kendskab til C++ og gider læse en tutorial eller 2, samt gider at læse Microsofts dokumentation til de Windows kald, man er nødt til at bruge, er det relativt simpelt at lave den ønskede funktionalitet i ren Win32 C++ kode. Til gengæld er det svært at få det til at se pænt ud :-)
Avatar billede arved Nybegynder
08. september 2003 - 16:37 #11
Jeg ved intet om C++
Avatar billede bertelbrander Novice
08. september 2003 - 20:14 #12
Jeg har lavet et første udkast, der er ikke nogen billeder på endnu, men fortæl mig om det kan bruges som en start.
I funktionen DialogFunc er der en case 101: (og case 102: osv) kode bliver udført for hver knap der bliver trykket på. Når du trykke på den første knap skulle notepad gerne starte med c-sourcen. For de andre knapper kommer der blot en box der siger hvilken knap der er trykket.
Du skal så ændre det der sker når man trykker på hver knap så det passer til dit behov. Oftes skal RunCommand kaldes med den kommando der skal udføres som parameter.
Jeg har kun VC++ 6.0, men jeg tror at 7.0 kan bruge den project fil der er med (apprun.dsw).
Du finder koden her:
http://home20.inet.tele.dk/midgaard/apprun.zip
Avatar billede arved Nybegynder
08. september 2003 - 22:32 #13
Det ser godt ud! det loader/konverterer og kompilere uden problemer - notepad starter med sourcen, og msgbox'ene kommer
Avatar billede bertelbrander Novice
08. september 2003 - 23:50 #14
Ok.
Jeg vil prøve at putte nogle billeder på. Vil du have billeder på knapperne og teksten ved siden af, både billede og tekst på knappen eller billede ved siden af knappen og text på knappen?
Avatar billede arved Nybegynder
08. september 2003 - 23:53 #15
billeder på knappen og teksten ved siden af
Avatar billede bertelbrander Novice
09. september 2003 - 20:34 #16
Jeg har lavet en ny version med billder på knapperne og tekster ved siden af.
Det går ud fra at billederne er 32 * 32 pixel, hvis de har andre størrelser skal du rette i både C og rc filen.
Billederne skal være bmp billeder.
Som det er lavet skal programmet kompileres når/hvis du laver nye billeder, jeg kan måske godt få det til at loade fra disk'en når det starter, hvis du hellere vil det.

Programmet er lavet med LCC og er i ren C (dvs ing MFC eller C++) så det burde kunne kompilere med stort set alle C kompilere på windows platformen (inklusive VC++).

Den nye version hedder også:
http://home20.inet.tele.dk/midgaard/apprun.zip
Avatar billede arved Nybegynder
09. september 2003 - 21:20 #17
Det med at loade fra disken gør ikke noget; jeg kan godt finde ud af at skifte billederne...
[legede lidt med det og fik billedet til at "gå med ned" når man trykkede på knapperne (følte mig lidt stolt), legede lidt mere, og så virkede ikke noget... slettede og prøvede igen]
Men, hvordan kan man så få billedet til at "gå op" når man kører musen over knapperne, og hvordan kan jeg få et baggrundsbillede?
Avatar billede arved Nybegynder
09. september 2003 - 21:24 #18
I øvrigt, jeg kan godt se hvordan du "skriver" billedet til knappen, men jeg forstår ikke hvordan du referere de billede der er i rc filen, gætter på at det har noget at gøre med:
128:... ButtonBitmap[CtrlID - IDD_BUTTON_1]  ...
men så stopper min forståelse også...
Avatar billede bertelbrander Novice
09. september 2003 - 23:14 #19
I WinMain loader man bitmapperne (vha LoadBitmap(...)) til ButtonBitmap[].
I DrawItem() tegner man bitmapperne, CtrlID er ID'en på den knap som windows wil have tegnet. Den første har jeg kaldt IDD_BUTTON_1 som er defineret til at være 101 i headerfilen (apprunres.h) de øvrige knapper hedder IDD_BUTTON_2, IDD_BUTTON_3, IDD_BUTTON_4, som er det samme som 102 103 og 104. heraf følger at man slår op i arrayet ButtonBitmap med index 0..3 afhængig af hvilken knap der skal tegnes.
Avatar billede bertelbrander Novice
09. september 2003 - 23:19 #20
Jeg kan godt lave et baggrunds billede. Skal det dække hele boxen inklusive knapperne eller skal det kun dække det der ligger bag ved teksten?
Det er lidt mere bøvlet at lave det så knapperne kommer til at "gå op" når man fører musen over dem (jeg ved ikke helt hvordan man gør).
Avatar billede arved Nybegynder
10. september 2003 - 13:47 #21
dække hele boxen
Avatar billede bertelbrander Novice
10. september 2003 - 17:56 #22
Jeg har foreløbigt lavet en version der dækker det bag teksten:
http://home20.inet.tele.dk/midgaard/apprun2.zip

Hvad er det for et image du vil have på baggrunden? Kan du evt bruge et eller andet mønster?
Avatar billede arved Nybegynder
10. september 2003 - 19:08 #23
Det er et billede med logo som vandmærke og gradiente farver (dansk ord?)

I øvrigt, et dejligt test billede! Jeg vil kalde det en dag nu: der er dansk fodbold i TV, og øl på køl, lige nu
Avatar billede arved Nybegynder
11. september 2003 - 16:54 #24
Jeg sad og arbejdede lidt selv, og med den kode jeg har fået fra dig, kom jeg frem til hvordan jeg kan "skrive" baggrundsbilledet direkte til vinduet:
Tilføjet:

static BOOL doPaint(HWND hwndDlg);
under
static BOOL CtrlColorStatic(HDC hdc, HWND hwnd);

tilføjet:
  case WM_PAINT:
      return doPaint(hwndDlg);
under:
  case WM_INITDIALOG:
    InitializeApp(hwndDlg, wParam, lParam);
    return TRUE;
i funktionen: DialogFunc

tilføjet funktionen:
static BOOL doPaint(HWND hwndDlg)
{
    HDC MemDC;
    HBITMAP OldBitmap;
    PAINTSTRUCT ps;
    HDC        hdc;
    RECT        rcClient;

    //GetClientRect(hwnd, &rcClient);
    hdc = BeginPaint(hwndDlg, &ps);
    MemDC = CreateCompatibleDC(hdc);
    OldBitmap = SelectObject(MemDC, BackBitmap);

    BitBlt(hdc, 5, 5, 180, 244, MemDC, 0, 0, SRCCOPY);
    SelectObject(MemDC, OldBitmap);
    EndPaint(hwndDlg, &ps);

    return TRUE;
}

slettet:
  HWND StaticWnd = GetDlgItem(hDlg, IDC_STATIC_1);
  SendMessage(StaticWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM )BackBitmap);
i funktionen: InitializeApp


Har jeg glemt noget, jeg har fået det til at virke, men jeg ved ikke om jeg har glemt noget... har hørt nogle rygter om at i c++ er det meget farligt at glemme at rydde op efter sig, når man lukker...
[jeg føler mig meget stolt - dog hugget dele af koden fra et MS eksempel...]
Avatar billede arved Nybegynder
11. september 2003 - 16:59 #25
Avatar billede bertelbrander Novice
11. september 2003 - 20:24 #26
Du mangler vist en DeleteDC(MemDC);
Problemet med at glemme at delete sine gdi-objekter er mere at det sløver systemet meget ned hvis man har for mange ubrugte objekter til at flyde. Hvis man glemmer at kalde SelectObject(...) for at få valgt det gamle objekt, kan det have overraskende indvirkning på andre programmer.
Bortset fra det ser koden fin ud. Har du det der skal bruges nu?
Avatar billede arved Nybegynder
11. september 2003 - 22:41 #27
Efter lidt arbejde med det har jeg lavet et helt nyt projekt, jeg startede fra bunden med min nye viden om C++ (og med google til at finde stumper)
Så har jeg fået sat et lille program sammen, med mouseover og mere, jeg tænkte om min kode lige kunne rettes for dumme fejl...
http://web.imaginary.dk/code/iAutorun.zip
Avatar billede bertelbrander Novice
12. september 2003 - 00:48 #28
Jeg kan ikke lige få øje på nogen dummen fejl.
Du bør dog sætte det gamle bitmap tilbage til din memory dc inden du afslutter. Noget i stil med m_dcMem.SelectObject(pBmpOld), der passende kunne puttes ind i en destructor for din dialog.
Jeg ville nok have valgt at få knapperne (1-4) til at ligne knapper, så man kan se når man trykker på dem, men det er mere et spørgsmål om smag og behag.
Avatar billede arved Nybegynder
12. september 2003 - 01:35 #29
"Sætte det gamle bitmap tilbage i min memory?" Det jeg ikke forstå?

Speaking of smag og behag, så blev jeg færdig med grafikken... uha...
http://web.imaginary.dk/code/iAutorun.jpg
Men jeg har lige et enkelt spørgsmål inden vi lukker og slukker, hvordan kan jeg finde ud af hvad bibliotek programmet er startet i? (Så jeg nemt kan regne filnavnet ud på installationen)

I øvrigt:
Hvis der er nogen der er interesserede i at få "windows xp" knapperne så har jeg dem liggende i photoshop format - og jeg skal med glæde ligge dem ud.
Avatar billede bertelbrander Novice
12. september 2003 - 01:51 #30
Når man vælger et objekt (f.ex en bitmap eller en font) ind i en DC med SelectObject() returnerer denne det objekt der var der. Inden man frigiver DC'en skal man sætte det oprindelige objekt tilbage i DC'en (og dermed fjerne det objekt man satte ind).

Du kan få navnet (inklusive hele stien) på exe filen med GetModuleFileName(), du kan derefter bruge _splitpath til at udtrække drev og folder.
Avatar billede arved Nybegynder
15. september 2003 - 21:54 #31
Tassaduha, men jeg mangler lige et svar fra dig bertelbrander, så jeg kan lukke spg'et - selvfølgelig som tak for din hjælp!
Avatar billede bertelbrander Novice
15. september 2003 - 22:34 #32
Jeg forsøger, så vidt det er muligt, at undgå point.
Avatar billede arved Nybegynder
15. september 2003 - 23:04 #33
må man spørge hvorfor?
Avatar billede bertelbrander Novice
15. september 2003 - 23:07 #34
Nej
Avatar billede arved Nybegynder
15. september 2003 - 23:10 #35
Det ville betyde meget for mig hvis du nu fik disse point, hvis ikke for din hjælp så ihvertfald for baggrundsbilledet i test programmet...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester