Gå til innhold

Knapp -> skjerm av/på


Anbefalte innlegg

Jeg har et par spørsmål, som jeg håper noen har noen greie svar på, hehe.

 

Det første jeg har lurt på er om det er mulig å skru av og på skjermen med software. En kan jo i power-settings be om at skjermen skal skru seg av etter så så mange minutter, og så skrus den på igjen når jeg rører på musa eller trykker en knapp. Kan jeg gjøre dette manuelt fra et program? altså skru av skjermen? og så skru den på igjen? for eksempel ved å kjøre programmet? altså at når man kjører programmet, så sjekker den om skjermen er av eller på, og så skrur den på eller av. Eventuelt ha programmet liggende i bakgrunnen å vente på en bestemt tastetrykk/kommando/sammensetning, noe som bringer oss til ting nummer 2 jeg lurer på:

 

Og det andre jeg lurer på er hvordan en kan lage et program som "stjeler" en tast. Winamp for eksempel har jo en global key ting, hvor man kan sette ctrl+alt+shift+tast kombinasjoner til å være play og neste sang osv osv. Hvordan gjør en sånt? Og hvordan finner en ut hva tastekombinasjon som gir hva? Noe som bringer oss til tredje og siste jeg lurer på:

 

Jeg har kjøpt en fjernkontroll fra cyberlink, og den har en powerbutton øverst til høyre. Fant ut at den er koblet til "When I press the sleep button on my computer:" innstillingen i Power Options->Advanced. Og for at jeg ikke skulle skru av pcen uten å mene det mens jeg ser på film etc, hehe, satte jeg den til "Do nothing". men det vil jo si at den knappen nå ikke gjør noe som helst. Og det jeg veldig gjerne skulle hatt den til å gjøre er nettopp det å skru skjermen av og på. Så om noen har en genial måte å fikse det på, så ville jeg blitt veldig takknemlig =D

 

grunnen til mine tre spørsmål er en ide om at jeg kunne latt et tiny mini program, som bruker ultra lite resurser, ligge i bakgrunnen og lytte etter akkurat den knappen (hvordan man nå enn gjør det), og så når den blir trykket, skru av/på skjermen ettersom om den er på/av.

 

 

Noen som hang med?! hehe. poenget med dette er at en kan ligge i senga før en legger seg, se film/tv/whatever, og når den er ferdig, bare skru av skjermen og så sove, istedet for å måtte gå bort å klikke på knappen (noe som resulterer i at en gjerne våkner litt veldig i blant..). Pcen min har nemlig et par servere og slikt gående, så skrur den ikke av om natten. ellers kunne jeg jo bare brukt skru av knappen som den var....

 

 

 

alright! :w00t: Noen smarte mennesker som har noen ideer??

Lenke til kommentar
Videoannonse
Annonse

ja...ikke noe problem...bare å kunne alt å være pro, så funker alt fint.... jeg spurte om hjelp da, men etter å ha lest litt innlegg her så ser det ut til at folk er mer glad i å brife med at de er flinkere enn andre?

 

Jeg har bare lært C++ i et halvt år, som et av 5 fem fag, kan ikke så mye. og det msdn greiene er en vits. bare rot jo. umulig å finne noe som helst. mulig det er lett å finne frem i hvis jeg hadde vært som deg å være hyperflink og programmert i 117 år, men det har jeg ikke. jeg har har lært å programmere i snart 2 år, og jobbet mest med java, som er et ypperlig språk. men av og til må man liksom over til rotete og innvikla språk som C++. no offense til dere som digger C++, hehe. ypperlig språk da, men synes java er ryddigere og lettere å forstå. men nå er det altså C++, og jeg har ikke så mye peil, og hadde blitt veldig takknemlig om noen kunne hjelpe meg litt. (og tenker da på andre ting enn "du burde vært flinkere til å programmere" eller "det finner du lett ut av", for det er jeg ikke, og det har jeg foreløpig ikke gjort).

 

 

yess....så...igjen

GOTO post 1

Lenke til kommentar

Det finnes flere forskjellige måter å spørre om hjelp på.

En er å si "Jeg vil ha et program som skal gjøre X Y Z. Hvordan gjør jeg det?", noe som mer eller mindre legger alt arbeidet på den som skal hjelp deg, og viser lite initiativ.

Den andre måten er noe alá "Hei, jeg vil lage et program som skal gjøre X Y Z. Og jeg lurer i den anledning på en del ting. Hvordan kan jeg få til X? Jeg har forsøkt..."

Da viser du at du faktisk har prøvd å gjøre noe, i stedet for at alt skal bli servert.

 

Problemet med å ta imot tastetrykk når programmet kjører i bakgrunnen er det flere forskjellige måter å gjøre. Jeg fant en "all-purpose" Keyboard hooker som ser ut som om den gjør det du er på jakt etter. Du finner den her..

Tok ca. 5 min å finne den.

Lenke til kommentar

beklager, ikke ment sånn, hehe. (bare blir litt frustrert over sånne svar...vet allerede at jeg er dårlig, hehe)

 

og cluet er at jeg har hatt lyst en stund til å lage programmet som gjør x y og z, men ikke har visst hva sånt heter, eller hva en søker etter. krever naturligvis ikke noe ferdig program. Har lyst til å bli flinkere =)

 

men tusen takk for tipset Garibaldi! skal se om jeg skjønner noe av den keyboard hooker saken =D (noe jeg tror jeg hadde brukt riiimlig lang tid på å finne ut av at det het....)

Lenke til kommentar
*snip*

5860917[/snapback]

 

jørs; så mye tekst, og så lite innhold -- godt jobbet \o/

 

seriøst; dette er faktisk litt jobb, men svarene finnes i MSDN, ok? .. dette er Win32-spesifike spørsmål - og svarene ..uhm.. ligger i MSDN .. tenk: MSDN ... heh.. eneste måten å finne ut av det er å grave seg "dypt ned i møkka"; kjipt, eller hva?

 

dog.. er du jævlig heldig finner du noen som har vært borti _akkurat_ disse tingene før og vet sånn ca. hvor de skal leite slik at de kan henvise deg mer eksakt enn å si "sjekk MSDN", men jeg tviler litt :) er du ennå heldigere så gidder kanskje noen å leite for deg .. eller har du flax finner du kanskje en usenet-artikkel om det, eller en "vanlig" artikkel om noe lignende, hvem vet? (ikke-sannt; som Mr. Garbriladi er inne på)

Endret av dayslepr
Lenke til kommentar

åh helmaks tsg1zzn! *teste ut så fort som mulig* =D (hvordan skulle jeg ha funnet ut av det der på egenhånd liksom...? tusen takk=)

 

og til dayslepr: beklager all min tekst. av og til er det bare sånt som skjer hos meg. bare sitter å taster og ting kan bli langt uten innhold eller mening...dvs det er vel der inne et sted, men ja. uansett, var det jeg håpet på ja, at noen hadde en liten clue. kan jo grave meg ned i msdn, men hadde håpet å ikke måtte grave meg heeelt ned. så det jeg håpet på var om noen hadde noen funksjoner som hadde med såntå gjøre, slik at jeg hadde et sted å starte. og nå har jeg muligens det. så takk skal dere ha alle sammen =)

 

så skal jeg prøve å la være å spørre her igjen om jeg lurer på noe, og kun spørre om det er liv om å gjøre.

Endret av Tussi_qwerty
Lenke til kommentar

okai for det første hvis noen virkelig driver med programmerer med win32 så last for all del ned platform SDK og bruk hjelpen der... msdn på nettet er virkelig knotete å finne fram i hvis du ikke vet hvor du skal lete.. google er nesten alltid bedre.

Endret av Giddion
Lenke til kommentar

det høres bra ut. men da er vi fortsatt venner da, hehe. jeg skrev dette etter 4 timer med elektronikk forelesning og har lest om sockets og http protocoller og anna surr resten av dagen, så....da blir det sånn :p

 

men men, i morgen er det mer elektronikk, og mer sockets, http og html, så skal lavære å poste noe C++ spørsmål i morgen ;p

Lenke til kommentar

Ang det derre winamp greiene kan denne være til hjelp....

Compile den så kan du bruke den i cmd... Uansett kan du kanskje modifisere den til eget bruk!

 

Edit: Vet ikke om denne virker til nye winamp(noen får teste). Jeg bruker seff winamp 2.9x...Funker som faen da..

 

/* Created by Ghost5316 (MBald)
* You may change this file in any way you like,
* please include my name when redistributed
*/

#include <windows.h>
#include <iostream>
#include <string>
using namespace std;

const long cPrevTrack = 40044;           // Previous track button
const long cNextTrack = 40048;           // Next track button
const long cStartPlay = 40045;           // Play button
const long cPausePlay = 40046;           // Pause/Unpause button
const long cStopPlay = 40047;            // Stop button
const long cFadeAndStop = 40147;         // Fadeout and stop
const long cStopAfterTrack = 40157;      // Stop after current track
const long cForward5Secs = 40148;        // Fast-forward 5 seconds
const long cRewind5Secs = 40144;         // Fast-rewind 5 seconds
const long cStartOfPlaylist = 40154;     // Start of playlist
const long cEndOfPlaylist = 40158;       // Go to end of playlist
const long cRaiseVol = 40058;            // Raise volume by 1%
const long cLowerVol = 40059;            // Lower volume by 1%
const long cExecuteVisualPlugin = 40192; // Execute current visualization plug-in
const long cShowMainWindow = 40258;      // Toggle main window visible
const long cConfigureVisual = 40221;     // Configure current visualization plug-in
const long cReloadSkin = 40291;          // Reload the current skin
const long cCloseWinamp = 40001;         // Close Winamp
const long cPrev10Tracks = 40197;        // Moves back 10 tracks in playlist
const long cAddTrackAsBook = 40321;      // Adds current track as a bookmark
const long cPlayAudioCD = 40323;         // Play audio CD
const long cLoadPresetFromEQ = 40253;    // Load a preset from EQ
const long cSavePresetToEQ = 40254;      // Save a preset to EQF
const long cLoadDefaultPreset = 40174;   // Load default preset
const long cToggleTimeElapsed = 40037;   // Set time display mode to elapsed
const long cToggleTimeRemaining = 40038; // Set time display mode to remaining
const long cTogglePrefs = 40012;         // Toggle preferences screen
const long cToggleAbout = 40041;         // Toggle about box
const long cToggleTitleScroll = 40189;   // Toggle title Autoscrolling
const long cToggleOnTop = 40019;         // Toggle always on top
const long cToggleMainShade = 40064;     // Toggle Windowshade
const long cTogglePLShade = 40266;       // Toggle Playlist Windowshade
const long cToggleDoubleSize = 40165;    // Toggle doublesize mode
const long cToggleEQ = 40036;            // Toggle EQ
const long cTogglePlaylist = 40040;      // Toggle playlist editor
const long cToggleMiniBrows = 40298;     // Toggle minibrowser
const long cToggleEasymove = 40186;      // Toggle easymove
const long cToggleRepeat = 40022;        // Toggle repeat
const long cToggleShuffle = 40023;       // Toggle shuffle
const long cOpenFile = 40029;            // Open file dialog
const long cOpenURL = 40155;             // Open URL dialog
const long cOpenFileInfo = 40188;        // Open file info box
const long cOpenPlugOpts = 40190;        // Open visualization options
const long cOpenVisualPlugOpts = 40191;  // Open visualization plug-in options
const long cOpenJumptoTime = 40193;      // Open jump to time dialog
const long cOpenJumptoFile = 40194;      // Open jump to file dialog
const long cOpenSkinSel = 40219;         // Open skin selector
const long cOpenEditBookmarks = 40320;   // Show the edit bookmarks
const long cOpenLoadPreset = 40172;      // Opens load presets dialog
const long cOpenAutoLoadPresets = 40173; // Opens auto-load presets dialog
const long cOpenSavePreset = 40175;      // Opens save preset dialog
const long cOpenAutoLoadPreset = 40176;  // Opens auto-load save preset
const long cOpenDeletePreset = 40178;    // Opens delete preset dialog
const long cOpenDeleteAutoLoad = 40180;  // Opens delete an auto load preset dialog
HWND hwndWinamp;

void sendMsg(long ID) {
long x = SendMessage(hwndWinamp, WM_COMMAND, ID, NULL);
}

void showPlaybackStatus() {
int ret=SendMessage(hwndWinamp,WM_USER, 0, 104);
if(ret == 1) {
 cout << "Playing";
} else if(ret == 3) {
 cout << "Paused";
} else {
 cout << "Stopped";
}
}

void showPlayingTime() {
int ret=SendMessage(hwndWinamp,WM_USER, 0, 105);
ret = ret / 1000;
int min = ret / 60;
int sec = ret - min*60;
if(sec < 10)
 cout << min << ":" << "0" << sec;
else
 cout << min << ":" << sec;
}

void showPlayingLength() {
int ret=SendMessage(hwndWinamp,WM_USER, 1, 105);
int min = ret/60;
int sec = ret - min*60;
if(sec < 10)
 cout << min << ":" << "0" << sec;
else
 cout << min << ":" << sec;
}

void showPlaylistSize() {
int ret=SendMessage(hwndWinamp,WM_USER, 1, 124);
cout << ret;
}

void showBitRate() {
int ret=SendMessage(hwndWinamp,WM_USER, 1, 126);
cout << ret;
}

void showSampleRate() {
int ret=SendMessage(hwndWinamp,WM_USER, 0, 126);
cout << ret*1000;
}

void showRepeatToggle() {
int ret=SendMessage(hwndWinamp,WM_USER, 0, 251);
if(ret == 1)
 cout << "On";
else
 cout << "Off";
}

void showShuffleToggle() {
int ret=SendMessage(hwndWinamp,WM_USER, 0, 250);
if(ret == 1)
 cout << "On";
else
 cout << "Off";
}

void showTitle() {
char this_title[2048],*p;
GetWindowText(hwndWinamp,this_title,sizeof(this_title));
p = this_title+strlen(this_title)-8;
while (p >= this_title)
{
 if (!strnicmp(p,"- Winamp",8)) break;
 p--;
}
if (p >= this_title) p--;
while (p >= this_title && *p == ' ') p--;
*++p=0;
cout << this_title;
}	

void main(long argc, char *argv[]) {
   hwndWinamp = FindWindow("Winamp v1.x", NULL);
string x = "";
if(argc > 1) { x = argv[1]; }


if(x == "play") { sendMsg(cStartPlay); }
else if(x == "stop")             { sendMsg(cStopPlay); }
else if(x == "pause")            { sendMsg(cPausePlay); }
else if(x == "next")             { sendMsg(cNextTrack);	}
else if(x == "prev")             { sendMsg(cPrevTrack); }
else if(x == "vol_up")           { sendMsg(cRaiseVol); }
else if(x == "vol_down")         { sendMsg(cLowerVol); }
else if(x == "stop_with_fade")  { sendMsg(cFadeAndStop); }
else if(x == "toggle_playlist")  { sendMsg(cTogglePlaylist); }
else if(x == "toggle_eq")        { sendMsg(cToggleEQ); }
else if(x == "toggle_shuffle")   { sendMsg(cToggleShuffle); }
else if(x == "toggle_repeat")    { sendMsg(cToggleRepeat); }
else if(x == "forward_5_seconds"){ sendMsg(cForward5Secs); }
else if(x == "rewind_5_seconds") { sendMsg(cRewind5Secs); }
else if(x == "open_file")        { sendMsg(cOpenFile); }
else if(x == "show_winamp")      { sendMsg(cShowMainWindow); }
else if(x == "open_url")         { sendMsg(cOpenURL); }
else if(x == "open_file")        { sendMsg(cOpenFile); }
else if(x == "play_audiocd")     { sendMsg(cPlayAudioCD); }	
else if(x == "visualization")    { sendMsg(cExecuteVisualPlugin); }
else if(x == "stop_when_done")   { sendMsg(cStopAfterTrack); }
else if(x == "get_title")   { showTitle(); }
else if(x == "get_status")   { showPlaybackStatus(); }
else if(x == "get_playlength")  { showPlayingLength(); }
else if(x == "get_playtime")  { showPlayingTime(); }
else if(x == "get_playlistsize") { showPlaylistSize(); }
else if(x == "get_bitrate")      { showBitRate(); }
else if(x == "get_samplerate")   { showSampleRate(); }
else if(x == "get_shuffletoggle"){ showShuffleToggle(); }
else if(x == "get_repeattoggle"){ showRepeatToggle(); }
else {
 cout << "Arguments : " << endl;
 cout << "	play" << endl;
 cout << "	stop" << endl;
 cout << "	pause" << endl;
 cout << "	next" << endl;
 cout << "	prev" << endl;
 cout << "	vol_up" << endl;
 cout << "	vol_down" << endl;
 cout << "	stop_with_fade" << endl;
 cout << "	toggle_playlist" << endl;
 cout << "	toggle_eq" << endl;
 cout << "	toggle_shuffle" << endl;
 cout << "	toggle_repeat" << endl;
 cout << "	forward_5_seconds" << endl;
 cout << "	rewind_5_seconds" << endl;
 cout << "	open_file" << endl;
 cout << "	show_winamp" << endl;
 cout << "	open_url" << endl;
 cout << "	open_file" << endl;
 cout << "	play_audiocd" << endl;
 cout << "	visualization" << endl;
 cout << "	stop_when_done" << endl;
 cout << "	get_title" << endl;
 cout << "	get_status" << endl;
 cout << "	get_playlength" << endl;
 cout << "	get_playtime" << endl;
 cout << "	get_playlistsize" << endl;
 cout << "	get_bitrate" << endl;
 cout << "	get_samplerate" << endl;
 cout << "	get_shuffletoggle" << endl;
 cout << "	get_repeattoggle" << endl << endl;
 cout << "::   post to the forums if you want any more functionality    ::" << endl;
 cout << "::         (make surey you explain what you want :-p)         ::" << endl;
 cout << ":: Note: a select few functions only work in winamp ver 2.5+  ::" << endl;
}
}

Endret av bjeffbjeff
Lenke til kommentar

BjeffBjeff: Går ikkje å kompliere her, denne linja gjer ein "warning":

long x = SendMessage(hwndWinamp, WM_COMMAND, ID, NULL);

Warning:

63 D:\***\main.cpp [Warning] passing NULL used for non-pointer converting 4 of `LRESULT SendMessageA(HWND__*, UINT, WPARAM, LPARAM)' 

Lenke til kommentar

Da går det jo da... Den advarer at du sender NULL til noe som ikke er en peker. (Eller noe sånt, heh)

Uansett, sånne warnings trenger du ikke å bry deg om. Det er greit å se gjennom dem, for å se om du kanskje har gjort en feil, men om ting er riktig, kan du bare ignorere dem. ;)

Endret av zirener
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...