ガソリンの味がするコーヒーを飲み干しながら立てましたわ
NTFSに特化したやり方でいちいちルートからファイルリストを舐めていかないで 超高速にHDDのファイルリストを取得する技があるって聞いたんですが 具体的にどうやればいいんでしょうか?
NTFSを自前で読む
/:.:.:.:.l:.:.:.:.:.:.:.:.:.:l:.:lヽ.:.:.:.:.:ハ:.:.:l:――‐--――ヘ
,':.:.:.:.:.:l、:.:.:.:.:.:.:.:.ト、!ハト、:.:.:.:',:.:l:.:..: : : : : : : :: : : : 〉
/:l:.:.:.:.:.:.l ヽト、:.:.:.:.l /ィ云ミl:.:.:.:.l:.:ト――――ァ´:./
,':.:.l:l:.:.:.:N,≧z-ヽ、l ゛弋ィリ l:.:.:.:.:l/ /: :/
!:.:.:l:l:.:.:.:l〈弋ィ} lイ:.:.:.l /: : : / ,、
!:.:.:N:.:.:.:ヽ、´ 、 !:.:ハ! /: : : / }: :ヽ
. l:.:.:.:.:lヽ、:ヘヽ r‐、 ,イ:./ __ /: : : 〈___/: : : 〉
. l:.:.:.:.:l ヽ、 ` - ...__  ̄ ./ l:.ムィ \: : : : : : : : : : : : /
. !:.:.:.l:.! `ヽ{ !  ̄ _..イ−{ ` ̄ ̄ ̄ ̄ ̄
l:.:.:.:.l:l _, -ィ} / /−ム- / これは
>>1 乙じゃなくて
l:.:.:.:.l:l / /-/‐ /,−く-、 l ツインテールなんだからな!
l:.:.:.:.l:l / /−{ / { }, ヽ. l 勘違いするんじゃないよ!
>>9 10スレぐらい過去スレ眺めてみたけどAdvancedWindowsは誰一人叩いてないのにな
誰だよ
::|
::| ____
::|. ./|=| ヽ. ≡三< ̄ ̄ ̄>
::|. / |=| o |=ヽ .≡ ̄>/
::|__〈 ___ ___l ≡三/ /
::|、ヽ|.|┌--、ヽ|/,-┐| ≡/ <___/|
::|.|''''|.\ヽ--イ.|ヽ-イ:| ≡三|______/
::|.ヾ |.::. .. ̄ ̄| ̄ /
::| ';:::::┌===┐./
::| _〉ヾ ヾ二ソ./ こ、これは
>>1 乙じゃなくてスラッガーなんだから
::||ロ|ロ| `---´:|____ 変な勘違いしないでよね!
::|:|ロ|ロ|_____/ロ|ロ|ロ,|`ヽ
::| |ロ|旦旦旦旦旦/ロ/ロ|旦,ヽ
::|ロヽ 旦旦旦旦旦./ロ,/|::旦旦)
::|ヾ旦旦旦旦旦旦,,,/::::|、 旦旦|
VC8では、pdbを生成せずにイメージにデバッグ情報を付加することはできますか?
VCスレへどうぞ
どもです。そうします
イメージにデバッグ情報を付けてると公開する時カコワルイぞw
22 :
デフォルトの名無しさん :2009/01/09(金) 16:33:17
アプリケーション上から、マルチCPUのON/OFFを制御したいのですが、そのようなAPIをご存知の方教えて頂けないでしょうか?具体的には、 タスクマネージャ - プロセス - 関係の設定(プロセッサの関係) にて、できる操作と同様に、あるプロセスに対して、CPUを1つにしたり、2つにしたりしたいのですが、方法が分かりませんでした。
セットプロセスアフィニティマスク
なんでカタカナ?
test
なんのtest?
test
何でお前存在してるの?
/ ̄ ̄\ / _ノ ヽ_ \ | ミ(⌒)(⌒)彡 / ̄ ̄ ̄\ | *(__人__)*:| / ⌒ ⌒ \ | ` ⌒´ | / ミ(>) (●)彡 ((\ | | | (__人__) |゙)〈〈ヽ、 ヽ ノ \ ` ー ´ /と' ; ) /⌒<>★<>、 `> <´ `i 〜| / / o )l /  ̄ ̄ ̄\ /⌒ヽ<>★<>⌒ヽ / .| / / | o |. | / ⌒ ⌒ \ | | o ) ソ / _/ ,,/ ノ ヽ.| / ミ(●) (●)彡 | |. o |\ ,/ rと二ソ ノ'〜'〜'〜'〜ゞっァ | ::⌒(__人__)⌒:| ノ ノ |  ̄ ん'〜'〜'〜'〜ゝ \ `ー' / 〆 / \ | ィ / /⌒<>★<>ヽ `〜"〜ヽ〜ヽ〜ヽ〜ヽ | / / / ソ o \\ | ィ | |=|=/ r;と_,ノ〜'〜'〜'〜'〜、_゙っァ | / / . | | | ⌒( Y ノ~´ | ノ 丿 | |, | 丿=/=/ |==|==| . |,___)__`) ヘ__ハ_) |"___) __)
貼ろうと思っても躊躇するだろ…常識的に考えて…。
常識的に考えるなってこった
常識の枠に囚われてはいけないのですね、わかります
>>1 乙なんです ゚。, ☆ ゚. + 。 ゚ ,。・ .
(;><) . +。 . 。゚.・ o.゚ *。 ゚.+
l^ヽ'"'"~/^i'ツ'∧ ∧
ヾ 'ミω‘ * ) )) もふもふぽ・・・♪
ミ ´ ∀ ` と, ヽ
ッ _ "ミ__)。 . ゚. ☆。゚.・ o.゚
(´彡,. (,,_,ノ _ヽ_)_) ゚. 。゚.・ o *
゚。, ☆ ゚. + 。 ゚ ,。・ . 。 ,.。
MultiByteToWideCharってバッファが小さいと失敗するのか _TRUNCATEみたいなフラグ用意しとけばいいのに、使えねーなもう
予めサイズ0で呼び出して、必要なバッファを確保するのが作法だろ。 /* * caller must free() */ wchar_t *SjisToUnicode(const char *str) { int size = ::MultiByteToWideChar(CP_OEMCP, 0, str, -1, NULL, 0); if(!size) return NULL; wchar_t *p = (wchar_t *)malloc(sizeof(wchar_t)*size); if(!p) return NULL; ::MultiByteToWideChar(CP_OEMCP, 0, str, -1, p, size); return p; }
作法とかじゃなくてさ、エラーメッセージに使う場合なんかだと256文字程度で十分だろ そのSjisToUnicodeとやらで100万文字のバッファが確保されると馬鹿でかいメッセージボックスが出る羽目になる そもそも、バッファが小さいと失敗するAPIもあれば途中までコピーしてくれるAPIもあったり統一性無さすぎ
嫌なら使うなボケ
逆に「失敗してくれよ!」と思うAPIもあるよ。ファイルパス関係とか。 例えば、GetModuleFileNameなんて、バッファが小さいと お節介にもバッファに収まる範囲までコピーしてくれて、 しかも終端のnullを付けないというおバカ仕様 おまけにサイズ0で呼び出しても必要なサイズが得られないしw こういう糞APIを目の当たりにするとMSのプログラマって頭悪いなーって思う。
何から何に変換するかわかってるんだから、元のサイズから最大でいくつになるかわかるだろう。
>>38 msdn見たらvista以降では直ってるみたい
まさに「仕様という名のバグ」
>>39 元のサイズがわからない事だってあるよ
頭悪いねキミ
SHAnsiToUnicodeはtruncateするらしいよ シェル開発チームの中の人も不便に感じたのだろうなあ
そもそもWin32はWin16からも仕様を引きずってきちゃってるわけで 今更なに言ってんだかって話だなw
>>43 知らないならレスしないでください。ウザイだけです。
.net使うという選択肢は出てこないんだな
ネットなら毎日使ってるが。
小回りが利かない.netはパス
たいてい、そんな小回りは必要なくないか?
EnumWindowsで躓くから嫌です
.netってウィンドウのサブクラス化がやたら面倒じゃないか? スーパークラス化は継承だけでできるけど
ドトネトがわかってない素人なのはわかった
>>51 リストコントロールのItemChangedでメッセージが3連発くるとか無駄に面倒な部分は
.netで改善されたの?
逆汗、逆コンパイルが簡単にできすぎ シェアウエア作ったら一時間でクラックされそうw
大丈夫 君のプログラムはクラックしたくなる程の魅力が無いから
<STOP> スレ違い ここまで <STOP>
<RESTART> スレ違い ここから <RESTART>
>.netってウィンドウのサブクラス化がやたら面倒じゃないか? >スーパークラス化は継承だけでできるけど >.netってウィンドウのサブクラス化がやたら面倒じゃないか? >スーパークラス化は継承だけでできるけど >.netってウィンドウのサブクラス化がやたら面倒じゃないか? >スーパークラス化は継承だけでできるけど
とりあえず、サブクラス化と継承は関係なくね?
.netの方法でできないって意味で言ったんだけど Win32でWindowProc書くのと大差無い方法でできてもねぇ・・・
サブクラス化を知らないならレスしないでください
>>60 NativeWindowクラス継承すれば一発
10行で書けるが?
>>62 馬鹿?その先が面倒だろ
WM_〜や構造体を定義しなくてはならないしポインタへのアクセスだってあるだろ
素直にWin32で作った方が楽だよ
派生クラスでWndProcオーバーライドするだけなのにWinAPIと大差無いとか言われてもねえ
<STOP> スレ違い ここまで <STOP>
話を理解してない馬鹿が多くて困るぜ
<STOP> スレ違い ここまで <STOP>
凝った事をしようとすると低レベルAPIの方が楽なのは当然じゃん。 これだから頭固いオッサンは困るんだよ。
<STOP> スレ違い ここまで <STOP>
70 :
デフォルトの名無しさん :2009/01/10(土) 17:01:29
スレ違いだからやめろというのは分かるが1レス置きに書かなくてもなぁ・・・
ageちゃったごめん
お、盛り上がってるなw MAX_PATH vs 長いファイル名 Win32 vs .NET この辺りはもはや定番だな
もうだめだこのスレ
74 :
デフォルトの名無しさん :2009/01/10(土) 17:08:40
ファイルサイズだけを取得したい場合 GetFileSizeを使うよりFindFirstFileを使った方が効率的なのでしょうか?
もうだめだこのスレ
もうだめだこのスレ
>>74 何を効率化したいの?実行時間?コードサイズ?書く手間?
実際に両方やってみりゃいいじゃん
79 :
74 :2009/01/10(土) 17:42:42
とりあえず、API呼ぶ回数が少なくて済むFindFirstFile使うことにしました
呼ぶ回数が少なくても遅くなったら意味なし 実際どうかは知らんが
というか共有違反でオープンできない可能性を考慮するとFindFirstFileが妥当なんだが。
82 :
デフォルトの名無しさん :2009/01/10(土) 18:07:38
>>80 そこが知りたくて質問してみたんだ
誰か知っている人いないかな
>>81 ファイルサイズを知るって事だけが目的妥当そうですね
今作っているのはサイズ取得後そのファイルをMoveFileするので
先に共有違反とかがわかるのも良いかもしれない
まあ、自分で使うツールを作っているので細かいのはどっちでも良いか
コーディングの手間を考えたらFindFirstFile()一択だな 手間=バグの入る余地が増える
>>83 そんな問題があるのか!
これから使うときは気をつける必要があるな
86 :
74 :2009/01/10(土) 18:19:05
>>83 NTFSログファイルのサイズを増やすと発生しにくくなるって書いてあるけど
HDD残り500Mくらいで使ってるから発生しやすいのかな
とりあえず、ファイルサイズがつじつま合わなくなったらこれを疑ってみます
>>86 >>83 のリンク先にあるように、コマンドプロンプトから
chkdsk C: /L
で現在/最大のログサイズが分かる
また「仕様という名のバグ」か。
89 :
74 :2009/01/10(土) 18:46:45
>>87 現在のログ ファイル サイズは 65536 KB です。
このボリュームの既定のログ ファイル サイズは 65536 KB です。
と言われた俺はこの現象出る可能性大!?
逆にどんな風に出るか動作確認が出来る と考えればおk! うちのDドライブもそうなってたけど<満タン
91 :
83 :2009/01/10(土) 18:50:42
いや、単なるバグだろ。まったくなにやってんだっての。
>>89-90 規定=初期設定(パーティション作成直後)だろ。
自分でchkdsk /Lで変えない限り規定のままだったはず。
FindFirstFileはファイル時刻の更新で時差が出るから 現在の正確な情報はGetFileInformationByHandleで取れ って結構前からMSDNに載ってたはずだが 邦訳MSDNには載ってない謎
ごめん時刻に限らず全部だった
95 :
90 :2009/01/10(土) 19:04:24
>>92 残念、うちのCドライブは
現在のログ ファイル サイズは 54512 KB です。
このボリュームの既定のログ ファイル サイズは 65536 KB です。
と出てる
>>95 何らかのソフトがログファイルのサイズを変えたのだろ
市販のデフラグソフトとか
あと、パーティションの空き領域が不足したらMFTやメタファイルの予約領域が縮小されるから それも関係してるかもな
98 :
90 :2009/01/10(土) 20:42:35
>>96 mjd!?
うわぁ、分かりづらい仕様だな・・・
てか、それならchkdskのあの表示は意味無いじゃん
結局GetFileSize()の方が安全ってことだな
パーティションサイズの0.5%と65536KBの小さい方が既定のサイズになってる気がする。
fseek(mF,0,SEEK_END); mSize = ftell(mF); fseek(mF,0,SEEK_SET); でやあああああああああああ!
フォルダの監視を行う処理を作ろうと思っているのですが、 ファイルが削除されたのはプログラム内でフォルダの直前の情報を保存しておいて 比べるしかないですか?
なんかあったぞ、と俺の記憶が言っているが それが何を使えばいいかは覚えてないw
FindFirstChangeNotification これかなぁ? おかしい・・・たしかあった気がするがまるで記憶がないw
ReadDirectoryChangesAだろ
A なんかないだろ
検索したら7件でてきたw Aとったら3件www Wがデフォなのか。
WがついてるくせにAが無いという変なAPI 実はWatchの略なのか?
知らレス
W=(笑)にきまってるだろjk
知らないならレスしないでください。ウザイだけです。
知らレスウザです。
srud
std::srud(const Res& uza);
新規APIのうち、かつて9xと共通だったコンポーネントはWのみで、 最初からNTのみのコンポーネントはWが無くてLPCWSTRとかキメ打ちなんだよ。 今俺が考えたんだけどね。
Vista厨涙目\(^o^)/
っていか新機能は新しいバージョンにしか載せないというのはいつも通りのことだろ。
GetPrivateProfileStringって大きすぎるバッファを指定すると読み込めなくなるの? 98seで動かしてたら0x000000ffの大きさのバッファなら受け入れてくれたのに0x00010000の大きさのバッファ指定したら値をバッファに格納してくれなくなった…… 16の遺産だからだろうか?
レジストリエントリは最大サイズがあった気がするが
多分、0x000100ffなら動くと思うよ。w
http://support.microsoft.com/kb/78346/EN-US/ If an application uses the standard Windows application program
interface (API) calls to access the .INI files, the limit is 64K.
Examples of these standard API calls are GetPrivateProfileString()
and WritePrivateProfileString().
今時GetPrivateProfileなんて使うなよ
そんな制限9xだけだろ
MoveFile("\\\\remote\\file.txt", "\\\\remote\\file2.txt"); ってやった場合remoteから一回実行したPCにファイルデータが送られて その後またremoteに書き込むの?
でかいファイルで試してネットワークトラヒックでも監視すれば?
トラヒック
ディジタル
>>128 あなたは知らないのだろうけど
通信業界では、トラヒックという言葉を使うのだそうですよ。
ヒューズ
知らレスウザです。
もうだめだこのスレ
元からだろ。
知らないならレスしないでください。ウザイだけです。
>>132 .LifeState = Life::DEATH;
srud( mdks ){ mkdr(); }
デスクトップのタスクバーを除いた作業領域の大きさを求めるのにはどのようにすればいいのでしょうか。 画面サイズを求めるのは簡単にできたのですが・・・
polygonを利用したいのですが、ベクターで動的配列として確保を行って渡したところ変換できない。 というエラーが出てしまうのですがVectorで動的に確保した物は配列として渡す事はできないのでしょうか?
教えてあげないよっ!ジャン!
>>140 タスクバーのサイズも取得して引けばいいじゃない
>>141 先頭が大文字だからSTLのvectorとは違うんだろうな。
Vectorとやらの仕様による。
>>144 C++の標準ライブラリの方のvectorです。。。
先頭大文字にしちゃうの癖なんです、すいません。。。
>>140 SystemParametersInfoとSPI_GETWORKAREAのことかな。
>>146 なに教えてんだよ!
このスレは教えちゃいけないんだぞ!
.NETに移行させようと必死になってないでどんどん教えろカス
うんこに餌を与えないで下さい
スレ違いを咎めるならむしろvectorの方だと思うけどw
今時SystemParametersInfoなんかで手抜きするな。 ちゃんとEnumDisplayMonitors+GetMonitorInfo使え
今時、WIndows 95かよ。。。
Iにつっこむの禁止
Iをつっこむのは?
>>156 両方作っておいて、環境によってどっちかを選ぶようにすればいい。
Wii ndows 95
162 :
デフォルトの名無しさん :2009/01/11(日) 20:43:12
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \
お前ら脱線しすぎ! いいぞもっとやれw
まぁ、WiiでWindows動かすのは誰かがやるだろうな ガワだけだろうけど。
退屈じゃのう
>>165 お前が引き篭もってるからだろ
働けクズ
質問いいですか? CopyMemoryとmemcpyが同じように思えるのですが、どちらを使うのがいいの?
少なくともWin32/Win64では同じだから好きにしろ
同じですか!ありがとうございました!
知ってるならレスしないで下さい話が終わってしまいます
じゃあ・・・ 同じ内容の関数がなぜ二つあるのですか?初心者が混乱してしまいます。
初心者がどちらかを発見できれば使えるだろ
memcpy_s使えよ
どうでもいい話としては環境とかランタイムライブラリによって CopyMemoryとmemcpy の実行速度が違うことがあるね。 コピーのループ内で一度にmovされるデータ長が違うとか そんなもんだろか?よくわからん。
ベンチマークしたら差はなくなると思うよ
そもそも #define CopyMemory RtlCopyMemory #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length)) なんだけどな。
>>176 MS以外のCだと、また違うことがあるのさ
へえ、どれ?
SDKで定義されてるのに違うとかw
#define RtlCopyMemory memcpy #define CopyMemory RtlCopyMemory ちなみにMinGWでも同じ
VBなんかだと実体をRtlMoveMemoryとしてCopyMemoryと宣言しているものをたまに見かける。
VBはC++と違って、本当にAPIを呼ばざるを得ないからな。 って、今気づいたのだが、 もしかして、Windows7用のSDK付属のDocumentExplorerには ページ単位でのホイールスクロールバグの修正が入った? 何か普通に落ちなくなってる。
VBなんて糞言語どうでもいいよ
それより、違うことがあるMS以外のCマダー?
>>177
>>183 Borland C++ Compiler は ifdef になってるから別のものになる可能性があるかも
こんなの
#define CopyMemory RtlCopyMemory
NTSYSAPI
VOID
NTAPI
RtlCopyMemory (
VOID UNALIGNED *Destination,
CONST VOID UNALIGNED *Source,
SIZE_T Length
);
VCでも、Alpha だか MIPS ではそうじゃなかったっけ?
alignが必要なCPUではRtlCopyMemoryが用意されている x86はそんなの必要無いからCRTのmemcpyと等価になっている
ツールバーのTBSTYLE_LISTスタイルの有無を動的に切り替えたいんだけど 反映させるにはどうしたらいい? 全然うまくいかない、教えてエロイ人 //D void SetTextPosition(HWND hToolbar, bool ListStyle) { auto style=GetWindowLongPtr(hToolbar, GWL_STYLE); if(ListStyle) { style |= TBSTYLE_LIST; } else { style ^= TBSTYLE_LIST; } SetWindowLongPtr(hToolbar, GWL_STYLE, style); SetWindowPos(hToolbar, null, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); }
autoなんて型あるんだ
>>188 コメントでD言語と言っているじゃないか。
あくまで Win32API のスレでしかないから 言語は不問なんだな。 今まで気にした事もなかったけど。
C++はautoとまともなfor eachを早く導入しる! ・・・後者はVC2005の独自拡張で使えるけどw
>>191 前者はC++0xを待て。もうそろそろのはずだ。
193 :
187 :2009/01/12(月) 23:37:57
言語というか演算子の問題だから本当はスレ違いだけどな まあ初心者の頃は if(style & TBSTYLE_LIST) style ^= TBSTYLE_LIST; なんて書いてたがw
質問です。 ウインドウの上をドラッグしたイベントをもらおうと思い WM_LBUTTONDOWN にて、SetCapture + ドラッグ開始と解釈 WM_LBUTTONUP にて ReleaseCapture + ドラッグ終了と解釈 とやっています。 これで基本的にはウインドウ外にマウスポインタが行ってしまっても作動し、満足なのですが、 どうやらドラッグ中にAlt+Tabなどでアクティブなウインドウを変えられてしまうと、WM_LBUTTONUPが届かないようです。 これに対処するには、WM_ACTIVEなどにも対処しなければならないのでしょうか?
>>196 ReleaseCaptureされるから当然メッセージは来なくなる。
問題になるならWM_CAPTURECHANGEDで処理する。
ショートカット作るとアイコンにショートカットのマークがつくんですが、 このアイコンを自分で作ろうと思ったらどうしたらいいんでしょうか。
SetParentでトップレベルのボタンコントロールを同プロセス内のウィンドウを親に設定したいんですが、 どうも関数実行後も親ウィンドウをNULLで返してきます。実際表示などもされてません。 こういうことはできないんですか?
InterlockedExchangeAdd関数の日本語版ドキュメントを見て 「加数じゃなくて被加数じゃないのか?」「原子加算って何だ?」と突っ込んでいたが それ以上にInterlockedExchange関数のドキュメントが突っ込み所満載だった件
>>201 ショートカットを作りたいんじゃなくてアイコンを作りたいんです><
アイコンエディタってこと・・・? 違うよな・・・
>>199 ヘルプのSetParentのとこに一杯書いてある注意書きは全部読んだ?
>>202 ICONDIR、ICONDIRENTRYでググれ
>>204 読みました。スタイルもその通り変更するようにしてるんですが・・・
HWND Hoge::handleがある。
HWND Hoge::setParent(HWND neo){
if(handle == NULL)return NULL;
LONG flag = ::GetWindowLongPtr(handle,GWL_STYLE);
HWND old;
HWND DESKTOP = ::GetDesktopWindow();
if( neo == NULL && ::GetAncestor(handle,GA_PARENT) != DESKTOP ){//子をトップレベルにする
old=::SetParent(handle,NULL);
::SetWindowLongPtr(handle , GWL_STYLE , (flag&~WS_CHILD)|WS_POPUP );
}else
if( neo != NULL && ::GetAncestor(handle,GA_PARENT) == DESKTOP ){//トップレベルを子にする
::SetWindowLongPtr(handle , GWL_STYLE , (flag&~WS_POPUP)|WS_CHILD );
old=::SetParent(handle,neo);
}else
{
old=::SetParent(handle,neo);
}
return old;
}
>>202 矢印アイコンはシェルが自分のリソースを表示してるものなのでWin32APIでは
変更できず、該当の機能をサポートするツールではshellの内部リソースを無理やり
書き換えるとかしてるらしい
(shell32.dllの30番あたり)
しかもどこのタイミングかの Windows のセキュリティアップデートで、今では
それもままならないとかの噂がある
C:\Windows みたいなパスを \\?\C:\Windows の形式に変換するAPIってありませんでしたっけ? なんか前見かけた記憶があるんだけど、今探すと見つからない。 気のせいだったのだろうか。
>>208 なんだそれ
正規表現使えばいいんじゃね?
_stprintf(str,_T("\\\\?\\%s"),path); でいいだろ
いや、ちゃんとネットワークパスの場合は UNC 付けたりとか してくれたんじゃないかと思って。 _stprintf(str,_T("\\\\?\\%s"),path); これで決め打ちしちゃっていいのかな?
InterlockedCompareExchange関数の日本語版ドキュメントに至っては 引数の型、戻り値の型、引数の要約すら大嘘 日本語版ドキュメントがダメなのって資料不足だけを指してたわけじゃないのね 誇張された話だとばかり思ってたが反省するわ
.NET Frameworkの方の翻訳は意外とまとも。 以前英語版と比べてみたが遜色なかったので日本語版読んでる。 Win32APIは英語版しか信用できん。
>>212 昔はPVOIDで宣言されてたんだよ
そんな事も知らないゆとりは黙っててね
ていうか日本語MSDNは基本的にWin98時代から更新止まってるので その時代の英語版が間違っててそのままになってるのも結構ある そもそも.NET関係しか翻訳のメンテしないのがおかしい
大人の事情です
嘘だらけのMSDNで日本の生産性を下げる→アメリカ人ウハウハ
MSKKが仕事しないのは有名な話 いや日本語版をMSKKが管理してるかどうかは知らんがMSKKが悪いって事にしとけ
MSKKは単なる商社ですから
>>202 SHGetFileInfoとSHGFI_LINKOVERLAYでなんとかならんか
>197 ありがとうございました。 無事できました
neoって何?
227 :
デフォルトの名無しさん :2009/01/14(水) 17:44:15
#ifdef _WIN32 って、32bitOS用としてコンパイルするときは、って意味ですか? 64bitOS用としてコンパイルするときはここは通らないと思ってOK?
>>227 64でも通る
以下MSDNより
_WIN32 Defined for applications for Win32 and Win64. Always defined.
互換性考えると仕方ないが、いろいろともにょもにょ来るな。
>>228 >>229 ども。
もひとつおねがいします。
#ifdef _WIN32
#include <pshpack1.h>
#endif
typedef struct tagHogestruct
{
...
}
#ifdef _WIN32
#include <poppack.h>
#endif
この場合、32bitでも64bitでもパッキングは1でいいんですか?
232 :
231 :2009/01/14(水) 18:03:47
ぐえ、こんなのもあった #if !defined(_WIN64) #include <pshpack1.h> #endif ↑これは32bitだけですよね……
現在フック処理がいくつ走っているか調べることは可能でしょうか?
ツールバーとステータスバーをウィンドウ上部に付けたいのですが、 そのままだと重なって表示されてしまいます。 ツールバーの直下にステータスバーが付いて2段になるような 回避法などありますでしょうか。 APIはCreateToobarExとCreateStatusWindowを使い 属性にはCCS_TOPを指定してウィンドウ上部にくるようにしています。
どっちを上に置くべきかプログラム書く人にしかわからんのだから、おとなしく座標で指定する。 と俺は思う。
無駄な改行ウザイ
srud(236,237);
srud関数にそんなオーバーロードがあるとは
241 :
デフォルトの名無しさん :2009/01/15(木) 11:38:56
スレッドが自然死した時に GetExitCodeThread()で得られる終了コードは何になりますか?
ExitThreadで設定した終了コード、もしくはスレッドプロシージャの返した値のいずれか
243 :
241 :2009/01/15(木) 11:57:31
>>242 ありがとうございます。 MSDNを見ても分かり辛かったので。
244 :
241 :2009/01/15(木) 12:05:02
あっ 詳細に聞きたいことを忘れてました。 スレッドプロシージャの戻り値がvoidでreturnした時に 勝手にExitThread()が呼ばれるらしいのですが その時の終了コードは何になりますか? 度々すみません。
自分で調べろと言おうとしたけど、そう言うなら何もう言うまい。
_beginthreadで作成したスレッドってこと? スレッドが終了した瞬間に、そのハンドルが再利用されて、 GetExitCodeが呼ばれる前に違うものを示す可能性があるからやめろと言いたい。
_beginthread廃止すればいいのにねぇ
_beginthreadの実際のTHREAD_START_ROUTINEである_threadstartの通常の戻り値は0 CreateThreadに無理矢理渡した場合は不定
_threadstartの戻り値じゃなくて_endthreadでExitThread(0);してる
CreateDialogParam() の第4引数で,作成先ダイアログボックスの WM_INITDIALOG メッセージ でツリービューウィンドウのハンドルを渡そうと思うのですが,以下のようにしてハンドルを 渡せません? HWND 型(32ビット符号なし整数)を LPARAM (32ビット符号付き整数)にキャストして 逆のキャストをすると値が失われるのですか? CreateDialogParam(hInst,"IDD_DLOG",hWnd,dlogProc,(LPARAM)hwndTreeView); dlogProc(…,…,…,LPARAM lp) { HWND hTreeView; switch(msg){ case WM_INITDIALOG: hTreeView = (HWND)lp; ……… case … } 調べると呼び出した時点では"-2"とかの値なのに、呼び出し側では"0"になってます。 第4引数で HWND をわたせないのでしょうか??
>呼び出した時点では"-2"
252 :
250 :2009/01/15(木) 17:07:05
ちなみに、そのツリービューはうまく表示されてるのですが…
多分値の確認方法が間違ってて、ちゃんと渡せてるか、最初から間違った値渡してる。
>>236 ダイアログに付けるステータスバーやツールバーの位置を
座標単位でずらすのは現時点まで調べた知識では無理のようです。
ステータスバーにMoveWindowなどは効かないようです。
2種類のバーがCCS_TOPで干渉するのは解消できそうにないので
別の方法を考えてみます。
本当にありがとうございました。
>>250 CreateDialogParam(hInst,"IDD_DLOG",hWnd,dlogProc,(LPARAM)&hwndTreeView);
dlogProc(…,…,…,LPARAM lp)
{
HWND hTreeView;
switch(msg){
case WM_INITDIALOG:
hTreeView = (HWND)(*lp);
ファイルを出力するプログラムとして以下のソースがあります。 ofstream fout; string str = "Hello"; string file_name = "a.txt"; wchar_t fn[MAX_PATH]; MultiByteToWideChar(0, 0, file_name.c_str(), -1, fn, MAX_PATH); fout.open(fn); fout<<str; fout.close(); ソースを読んだ限りではofstreamは入力としてUnicodeでないといけないというのは感じますが、 MultiByteToWideCharをなぜ使うかが分かりません。 この関数を使わなければエラーが出るというような場面を教えてください。
ウィンドウの外に●を描画したいんですがどうすればできますか? 透明のウィンドウ作ってそこに描画するしかない?
>>256 C++のString↓
typedef basic_string<char> string;
見れば分かるがunicodeじゃない
これ以上はC++スレで頼む
259 :
250 :2009/01/15(木) 20:59:16
>>255 さすが!値で渡さずにアドレスで渡すわけですね。初心者には思いも
つきませんでしたが、、、、やっぱりダメ (TT)とほほ。
ファイル単位の外部変数で渡すと通るんです。Borland C++ なんですが…
>>250 dlogProc(HWND hWnd,…,…,LPARAM lp)
{
HWND hTreeView = (HWND)GetWindowLongPtr(hWnd, DWL_USER);
switch(msg){
case WM_INITDIALOG:
hTreeView = (HWND)lp;
SetWindowLongPtr(hWnd, DWL_USER, (LONG_PTR)hTreeView);
………
case …
}
こうですかわかりません
…値渡しか参照渡しかの問題じゃないと思うよ…
>>250 >呼び出した時点では"-2"
32bitだとして0xFFFFFFFE って値のウィンドウハンドルってなくね?
263 :
250 :2009/01/15(木) 21:20:37
>>260 ありがとうございます。すげ〜〜〜〜〜〜!!! 260で出来ましたよ!!!
でも、最近 Win32API プログラミング始めた自分には分けが分かりません (T^T)
とほほ、先は長い。よろしければ、ごく簡単に解説をお願いできれば?
264 :
デフォルトの名無しさん :2009/01/15(木) 21:23:55
>>262 snprintf(buf,sizeof(buf),"hwndTV-RECV:[%d]",lp);
で強引に出力すると、”919128”でした。(^^;;
static HWND hTreeView; にしなさいとかそういうはなしだったんですか?
まさか、WM_INITDIALOG以外のとこでhTreeViewの値を 利用しているというオチか?
267 :
250 :2009/01/15(木) 21:47:26
>>266 あらら? プロシージャ内変数で WM_INITDIALOG の hTreeView値 を
保存して、case WM_COMMAND: 内で利用しちゃダメなんですか?
>>267 だめです。
void f(int x, int y)
{
int i;
switch(x){
case 1: i=y; // 保存
break;
case 2: printf("%d", i); //つかう
break;
}
}
int main()
{
f(1,2);
f(2,0);
}
ってしてるのと同じことです。
これ以上はC/C++のスレでお願い。
>>269 ?!
ということは、「いったん作られたウィンドウのハンドルは変化し得る」ってことですか?
>>270 スコープを抜けたら変数の内容が飛ぶってことをC/C++初心者スレで勉強してからまたこい
Windowsの問題ではなくて、C/C++の特質として値が変わりうるので、その理由はC/C++スレで聞いてください。
最後に、static 変数にしてもダメなんですか?
いいけど本質を理解しないと同じ目に合うぞ
>「いったん作られたウィンドウのハンドルは変化し得る」ってことですか? ある意味、こういう発想ができるところが怖い。
質問 Windowsでマルチスレッドのプログラムを作成しています 複数のスレッドから、int型の値を読み込み&書き換えるときにクリティカルセッションでロックしたほうがいいでしょうか? int型なので大丈夫だったりしますか?
しろ .netで予めスレッドセーフになってるとかでなければどの型だからとか関係無い
>>277 カウンタみたいな単純な加算とかだけなら
InterlockedIncrementとかInterlockedExchangeAddみたいな専用のAPIがある
その程度ならInterlocked系で事足りる気もするが、まあした方が無難だろうなあ。 Out-of-orderとか気にしだしたら頭が痛くなるし。
>>278-280 レスありがとうございます
Interlocked系関数は初めて知りました。これは便利ですね
>>278 .netだってlockとかInterlockedとかあるだろ
>int型なので大丈夫だったりしますか そのint型とやらは何ビットだと思ってるんだ
ビット数は関係ない。
atomic性が必要かどうかは本人にしか判断できない volatileだけで十分な場合もある
ところで、 lpOldProc = (WNDPROC)GetWindowLongPtr(hwnd,GWLP_WNDPROC); SetWindowLongPtr(hwnd,GWLP_WNDPROC,(LONG_PTR)SubclassProc); と lpOldProc = (WNDPROC)SetWindowLongPtr(hwnd,GWLP_WNDPROC,(LONG_PTR)SubclassProc); ってどっちがいいの? 前者だとアトミック性が保証されないし、 後者だと SetWindowLongPtr から返ってくるまでに SubclassProc が呼ばれると破綻しそう
そのウィンドウが所属するスレッドで呼び出す場合は、両方とも問題ない。 他スレッドのウィンドウなら後者を使って、lpOldProcが有効になるまでSubclassProcを待機させとけばいい。
Win32APIのアトミック性って何処に記述されてんの?
てか、他スレッドのウィンドウってサブクラス化できたっけ?
できるが
できます
できるかどうかを聞いてるだけじゃんwwwwwwwwwwwwww
sort( srud.begin(),srud.end() );
人生にterminateprocessされて死ね
TerminateProcessってI/O処理が終わるまで終了できないんだよな たまにタスクマネージャで殺せないプロセスができて強制リブートする羽目になる
すいませんお知恵をお貸し下さい 特定の形式のクリップボードのデータをクリアしたいのですが EmptyClipboard()だと全部消えてしまうみたいで、例えばCF_TXTのみをクリア するにはどうすればよいでしょうか?
全部持ってきて特定のだけはずして登録しなおすとか?
特定の形式だけクリアしたいなんて発想が間違い 例えばCF_TEXTをセットするとOSによって自動的にCF_UNICODETEXTやCF_OEMTEXTなどもセットされる
>>277 パフォーマンスは出ないと思うけど、
MethodImplOptions.synchronizedをプロパティのget/setメソッドに付けるのが一番手っ取り早い
スレッド的にはスゲー頓珍漢なこと言ってるような
P/Invokeもあるしアリかな
306 :
デフォルトの名無しさん :2009/01/17(土) 01:21:56
volatileで十分
307 :
300 :2009/01/17(土) 08:32:07
>>301 なるほど その手がありましたね。 それでやってみます。
>>302 ありがとう
情報Thanksでした!
押された状態の絵を用意して 表示する絵を変えればいいだけ。
なんて頭がいいんだ!
テーマ描画用のAPIかね。
ボタンの絵を描くAPIがあったはずだけど、そういう話ではないのかも
DVI で接続されているモニタの入力切替をコンピュータから行うことってできますか?
>>312 んー、BMP用意するのも考えたんですが、
それだと背景の色が変わったら
ボタンの背景色も変えないといけないわけで・・・
もっと賢い方法ないですかなぁ・・・
>>314 8bppカラーで良いなら、LoadImageのLR_LOADMAP3DCOLORSを利用する手がある。
いっそのことツールバーをボタンの代わりにつかったら?
ボタンを描くんじゃなくてButtonコントロール使えばいいだろ
質問です。 よくテキストエディタなんかであるマウスのドラッグによる画面スクローリングは どのように実現してるのでしょうか。
ドラッグしたらスクロールするようにしている
CreateDialogParam() で作ったダイアログ・ウィンドウのエディットボックス・プロシージャを サブクラス化して、リターンキーが押されたら同じウィンドウの [実行] ボタンにメッセージを 送って動かしたいのですが、動きません。 自分自身にメッセージを送っても動かないのでしょうか?
ダイアログはなー
その [実行] ボタンとやらのコントロールIDを IDOK にしとけばEnterに反応するだろ
メニューにサブメニューがある時の▲を描画するための APIとかあれば教えてください 今のところ自分で▲のアイコン作って描画してます
素直に文章を解釈するなら、DrawFrameControlじゃないかなあ。 DFCS_MENUARROW辺りを使えば描画できそう。
Marlettフォントあたりにあるからそれで描画しとけ
328 :
324 :2009/01/19(月) 02:07:19
329 :
デフォルトの名無しさん :2009/01/19(月) 22:16:12
Vista+IMAPI v1を使用してディスクアットワンスで書込む 方法はあるでしょうか? ※最終的にXPで使いたいためv1を使用しています
FindFirstChangeNotification でファイルを検地して遊んでるんですけど 一回のファイル変更で2度検知に引っかかっているようなんですが どんな場合にありえるのでしょうか?
何のフラグ指定してんの?
FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_SIZE
firefoxとかのブックマークメニューって ドラッグでメニュー項目移動できるよね あれどうやってるのかな?
MNS_DRAGDROP
>>335 > もしご存知て゜したら
どこの国の言葉?
知らないならレスしないて゜下さい。ウサ゜イた゜けです。
やて゜す
>>340 srudってググってもわからないです…
>>337 拝復 貴殿のレス、正に拝見いたしました。
ご無音に打ち過ぎておりますこと、まことに申し訳ございません。
さて、お申し越しの誤字に関する件、ご迷惑のほどお察し申し上げます。
当方においては、かな打ちであるためこのようなことになってしまいました。
ただ、1文字間違えただけで「どこの国の言葉?」との貴殿の発言は
少々行き過ぎではないかと感じる所存であります。
まずは、とりあえず事情を申し上げ、もってご返事といたします。
敬 具
APIでやるよーなこっちゃねーだろ 正規表現でいいんじゃねーの?
ネタで書いてんじゃない?
パス系のAPIあったよな なんか使えんかね
Apache httpdでも苦労してやっている。 特にwin32は別方面(ストリーム指定)からの攻撃もあるので、念入りにやらないといけない。
Url系はINTERNET_MAX_URL_LENGTHを超えると正しく処理できないからなあ IEとかどうしてるんだろ
GDIの質問です。 DCに線を引く場合、GDIで用意されるAPIより高品質な線を引きたいとします。 こういった場合、どういった方法が常とう手段となるのでしょうか? たとえば、GDI+はどうやって描いているのでしょう?
何をもって高品質とするのか、定義を明確にせよ。
もしDCがプロッタなら余計なことをしない方が高品質だと思うよ
よけいなことすんなよ?
ウィンドウメッセージの送信元を知る方法は?
知る方法はありますよ。
またフックか
手紙の差出人を特定するにはどうするか考えれば、自ずと答えが出るだろう。
郵便局に潜入するんですね!なるほど! ありがとうございました
>>360 馬鹿はレスしないで下さい。ウザイだけです。
363 :
デフォルトの名無しさん :2009/01/21(水) 14:48:16
そもそもどこのDCに高品質な線を描きたいんだよ
あきらかに説明足らずだけど どうせアンチエイリアスの掛かった線を描きたいとかそんな所じゃねーか? もし当たってるなら「GDI以外で」って事なんで 聞きたいであろう事はほぼスレ違いなんだけどな
適当にでかいサイズの画像に描画しといて縮小。
367 :
デフォルトの名無しさん :2009/01/21(水) 16:55:48
おそらく誰も答えられないであろうことは想像していたがw
368 :
デフォルトの名無しさん :2009/01/21(水) 17:00:10
まあ今は冬休みだしお前らに最初から期待してなかったよw
> まあ今は冬休みだし ?
372 :
デフォルトの名無しさん :2009/01/21(水) 18:51:35
Linux板から俺様登場! 何でも質問してくれw
まぁ一年中休みな人もいるわけで
>>372 知らないならレスしないで下さい。ウザイだけです。
378 :
デフォルトの名無しさん :2009/01/21(水) 19:48:09
ああ、またアカヒか ああ、またゲンダイか ああ、またsrudか
いまさら犬糞デビューか?少し落ち着けよ いずれBSDの素晴らしさに気付いて捨てると思うけど
GDIといえば、インストールした後の一回だけgdiplus.dllがエラーするって現象知ってる人いない? イベントログに出てたからこのDLLで発生したのはほぼ間違いないんだけど、 再現しないし、イベントログも手元になくて詳細忘れたし\(^o^)/オワタ
「エラーする」 日本語崩壊はここまで来たか
383 :
デフォルトの名無しさん :2009/01/21(水) 20:34:43
しょせんドザですからw
アーする
HANDLEを返すAPIではINVALID_HANDLE_VALUEを返す場合と、NULLを返す場合があるように思うのですが、 リファレンスで確認するしか方法がないでしょうか。 たとえば(handle == NULL || handle == INVALID_HANDLE_VALUE)でチェックした場合、 不都合が生じる可能性はあるのでしょうか
無い
一応、16ビット自体にもあったAPIは失敗値が非NULLで、 32ビット以降に作成された関数はNULLを返すという背景はあるけど、 リファレンスで確認するしかないだろうね それを面倒くさがるようではプログラミングはできないよ だから、たとえば(handle == NULL || handle == INVALID_HANDLE_VALUE)でチェックしたコードを見た場合、 こいつのコードは危ないぞって気になる あとは、ありえない仮定かもしれないけど、機械的に書いていて ↓みたいな状況になるかもしれないね HANDLE handle = MyGetCurrentProcess(pid); // カレントプロセスなら -1 を返す (handle == NULL || handle == INVALID_HANDLE_VALUE)
なるほど、わかりました。今後はちゃんと戻り値を調べたり覚えるようにします。 ありがとうございました。
>>387 GetCurrentProcessの返値チェックは不要だからそれは絶対にありえないと思う
イェア すまん MyGetProcess(pid) と書きたかったがGetCurrentProcessが頭にあって間違った べき論で答えるならドキュメント嫁と その上でどうするかはもちろん知ったことじゃないけどね
MyGetProcessはOpenProcessを呼んでるつもりなのか? だとすると-1を返すなんて有り得ないと思うが。
そもそもGetCurrentProcessがINVALID_HANDLE_VALUEと同じ-1を返すのもどうかと思うが -2以下を使っとけばいいのに しかもCreateFileMappingなんて第一引数で有効な値としてINVALID_HANDLE_VALUEが使えるし このあたりの設計の悪さは(HBRUSH)(COLOR_WINDOW+1)の+1と同じく間抜けだな
ATL::CHandleみたいなものを作っているなら、両方チェックするのもありだと思う。 (ちなみにATL::CHandleはNULLしか見ないけど)
なんか色々いじってたらウィンドウを作っても、その後、枠とかすら描画されない症状になっちゃったんですけど、 原因エスパーできる人いますか?もしくは作成後どのメッセージを発行すれば描画してもらえるのか教えてもらえんでしょうか?
あ、ちなみに最大化とかすれば再描画されるんですよ。
UpdateWindowが抜けてる
結局メッセージの送信元(ウィンドウハンドルとか)を特定する方法はない?
>>397 送信元がウインドウを持っていなかったらどうするんだ?
アホにも程がある。
それはNULLとかIsWindowで判別できるじゃん
ウインドウがあるか無いかではなく、送信元の指標として利用できないだろ。 なんでそんなに頭が弱いんだ?
じゃprocessハンドルならば?
送るときに付けるか、メッセージ送信用のAPIを監視するか 後者ならフックに該当し、スレが荒れるのでこれ以上の話は禁止
404 :
デフォルトの名無しさん :2009/01/22(木) 15:18:11
Linuxならそんな問題はないのにw 馬鹿だからWindowsに固執する
Win32スレでLinux云々言い出すやつって、 リアルでコミュニケーションがとれずに誰にも相手にされないんだろうな
いつもの人工無能がs/\.NET/Linux/gしただけだろ
問題以前にメッセージを送る共通の方法が無い D-BUSとか使わない限り
>>396 いたるところに入れたんですがやっぱりダメでした。うーん。。。
>>408 InvalidateRect+UpdateWindow
>>409 RedrawWindowだけで出来るだろ
RedrawWindowってそのままの名前なのに知名度低いよねw
問題の本質を理解するにはInvalidateRectをおぼえた方が良いキリッ
非クライアント領域の再描画はInvalidateRectでは無理
GDIリソース不足に陥ったとか
>>409-413 全部やってましたが、ダメでした。それともウィンドウ作ってすぐだとダメとか?そんなの無かったですよね・・・
根本的なところでウィンドウスタイル
MNS_DRAGDROPの使い方がわかんねー 英語でも資料無いしそもそもWM_MENUDRAGとかとれないし もちろんSetMenuInfoはしている。。
と思ったらいけた・・ サブメニューにSetMenuInfoやってもだめなのね・・
>>394 >なんか色々いじってたら
break付け忘れて別のcaseに突入してるとか、その手のミスだろ
ソース晒せないなら、捨てて1から同じもの作り直せ。それで直る
そういやvistaってdwm.exeがウィンドウの枠を描いてるんだっけ てことは、dwm.exeを殺しつづけるプログラム書いたら・・・
>>420 VistaベーシックテーマになってXP互換のドライバモデルによる描画になるはず。
すいません、質問してイイ?
それ毎日やってる奴って流行らせようとしてるんだろうなw
TrackPopupMenuつかって表示したメニューってDestroyMenuしたほうがいいの?
何?悔しかったの?w
>>427 ワロスwwwwwwwwwwwwwwwwwww
>>426 TrackPopupMenuに渡したメニューハンドルはどこから来たんだ?
>>430 CreatePopupMenuで作ったハンドルです。現状は作った後放置です。
「アプリケーションを終了する前に、DestroyMenu 関数を使って、どのウィンドウにも割り当てられていないメニューを破棄しなければなりません。」
知らないならレスしないだけです。
ポップアップメニューがウィンドウと関連がなくなるのってどのタイミングなんでしょう? 例えばTrackPopupMenuで表示している間は関連があるから削除しなくていいとか?
PC新調したのを期に64bitとも整合が取れるようにコードを直そうと思っているのですが、 WinAPIの場合、ポインタと整数をキャストしている関数を新しいものと入れ替えるだけでいいのでしょうか? またwindowsはLLP64ですけど、x64CPUを使っている場合 32bitOSと64bitOSで64bit長のデータを扱うと、前者はどこかネックになったりするのでしょうか?
ume
誤爆った
>>438 面倒だからあなたが答えてくれませんか?
>>435 そうだよ。それだけで64ビットに対応できると謳われている。
32ビットOSでは64ビットに拡張されたレジスタを使えないので、
64ビットデータを扱うには32ビットレジスタ2つかSSEレジスタを使わなければならない。
SSEに64bit整数演算命令なんかあったっけ?
SSEレジスタ = XMMレジスタって意味だろ SSE命令の話なんてしてねーよ馬鹿
そもそも整数とも言ってないな
まあ32ビット環境でも一部のx86命令はedx:eaxで64ビット扱えるけどね
メニューを決定したときWM_COMMANDでIDだけ分かりますが、決定時にメニューハンドルまで分かるメッセージってありますか?
WM_COMMAND_MENU_HANDLE_WAKARU
>>445 WM_MENUCOMMAND
たぶん。使ったこと無いけどそれっぽい。
MENUINFO.dwStyleでMNS_NOTIFYBYPOSを立てておくと、
WM_COMMANDの代わりに飛んでくると書いてある。
キメェ
450 :
デフォルトの名無しさん :2009/01/24(土) 17:44:06
質問です。 オーディオデバイスから出ている音声信号をキャプチャして画面効果を出すようなアプリが作りたいんですが どうすれば良いか分かりません。 詳細は自分で調べますので、大まかなキーワードや考え方の方針だけでも教えてください。
451 :
デフォルトの名無しさん :2009/01/24(土) 18:47:39
>>450 キーワード
オーディオデバイス,音声信号,キャプチャ,画面効果
ループバックの録音デバイスが存在するかどうかが要だな。 なけりゃほぼどうしようもないかと。
453 :
デフォルトの名無しさん :2009/01/25(日) 09:43:07
以下のようにダイアログボックスのエディットウィンドウをサブクラス化しようとして ますが、動きません(コンパイルは通る)。同じような形で CreateDialogParam() では できたのですが、ダイアログボックスは基本的にサブクラス化できないのですか? ret = DialogBox(g_hInst,"IDD_ADD_ITEM", hWndOwner, (DLGPROC)addItemProc); ……… BOOL CALLBACK addItemProc( hAddTvItemDlg, msg, wp, lp){ ……… case WM_INITDIALOG: ……… editboxAddItemProc = (WNDPROC)(LONG_PTR)GetWindowLong(GetDlgItem(hAddTvItemDlg,IDC_EDT_EDBX),GWL_WNDPROC); SetWindowLong(GetDlgItem(hAddItemDlg,IDC_EDT_EDBX) ,GWL_WNDPROC,(LONG)(LONG_PTR)editboxAddItemSUBproc); ……… static BOOL CALLBACK editboxAddItemSUBproc( hAddItemDlg, msg, wp, lp){ switch(msg){ case WM_KEYDOWN: if(wp==VK_RETURN){ PostMessage(hAddTvItemDlg,WM_COMMAND,(WPARAM)IDC_EDT_OK,0); return 0; }else if(wp==VK_ESCAPE){ EndDialog(hAddTvItemDlg,0); return 0; } // wp==VK_TAB はデフォルトで動くようです break; } return CallWindowProc(editboxAddItemProc,hAddItemDlg,msg,wp,lp);
>>453 editboxAddItemSUBprocは呼び出されてる?
それとは別に、
> editboxAddItemProc = (WNDPROC)(LONG_PTR)GetWindowLong(GetDlgItem(hAddTvItemDlg,IDC_EDT_EDBX),GWL_WNDPROC);
> SetWindowLong(GetDlgItem(hAddItemDlg,IDC_EDT_EDBX)
> ,GWL_WNDPROC,(LONG)(LONG_PTR)editboxAddItemSUBproc);
windowsx.hをインクルードして、
editboxAddItemProc = SubclassWindow(GetDlgItem(hAddItemDlg,IDC_EDT_EDBX), editboxAddItemSUBproc);
の方がいいだろう。変なキャストもしなくていいし。
DWL_DLGPROCじゃね?
ダイアログ側が先行してメッセージを取り込んでいる所為で、 そもそもメッセージが届いていない、というオチな気がしないでもない。 COMCTL32v6用のGet/SetWindowSubclassとかあるけど関係無いだろうなあ。
ついでに書いておくなら、
>>453 の処理を見る限り、
WM_COMMANDのIDOKとIDCANCELをうまく処理するだけで
目的が達成されそうな気がする。
SDKの「Dialog Box Programming Considerations」を参考にしてみてくれ。
なんでカンマが全角なのか非常に気になる
459 :
453 :2009/01/25(日) 13:48:10
みなさん、ありがとうございます。 static BOOL CALLBACK editboxAddItemSUBproc( hAddItemDlg, msg, wp, lp){ switch(msg){ case WM_KEYDOWN: >> MessageBox(……); if(wp==VK_RETURN){ として調べると、文字キー(abcなど)は来てますが、VK_RETURN は来てません。
【通信プログラムの質問】 初心者です。 送信、受信で、WriteFile()、ReadFile()を使用する事はわかったのですが、 この関数の使い方がわかりません。。。 具体的に引数に何を設定したらいいのでしょうか? 文字列:"Test送信データ!"を送信したい場合どうプログラムするのか教えてください。。
通信と言っても色々あるわけで MSDNでWriteFileの仕様は見たの?
462 :
460 :2009/01/25(日) 14:06:57
>>461 さん
見ました。以下のページですよね。
http://msdn.microsoft.com/ja-jp/library/cc429856.aspx BOOL WriteFile(
HANDLE hFile, // ファイルのハンドル
LPCVOID lpBuffer, // データバッファ
DWORD nNumberOfBytesToWrite, // 書き込み対象のバイト数
LPDWORD lpNumberOfBytesWritten, // 書き込んだバイト数
LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ
);
第1引数と、第5引数には、何を設定すれば、いいかわかりました。
2〜4に何を設定したらいいかわからなかったのです。。
通信は、PCのCOMポート通しの通信をやろうとしています。
いや・・そのまんまじゃん 第2引数 書きたいもの→"Test送信データ!" 第3引数 書きたいものの長さ→"Test送信データ!"のバイト数(文字列長さじゃないよ) 第4引数 書かれた長さをうけとる変数→適当なDWORD変数
フルスクリーン中にWindowsFlipモード ([ALT]+[TAB]や、Vistaの[Windows]+[TAB]を押したときになる、ウインドウを切りかえる画面のこと) になったかどうかを知りたんだけど、これを知る方法ってありますか? 調べて見た感じなさそうなんだけど・・・
465 :
460 :2009/01/25(日) 14:51:05
以下の様にしたら、コンパイルが通りました!! ありがとうございます。 動かしてみます。 char data[] = "test送信データ!"; LPDWORD lp; // 送信〜 WriteFile( handle, // シリアルポートへのハンドラ &data, // 送信バッファへのポインタ sizeof(data), // 送信データ数 lp, // 実際に送信したデータ数 NULL ); // 非同期I/O動作の場合のオーバーラップ構造体へのポインタ
× &data ○ data or &data[0] × LPDWORD lp; ○ DWORD len; WriteFile(handle,data,sizeof(data),&len,NULL );
>>465 DWORD written;とかにしてWriteFileの引数のlpを&writtenにしろ。それ以前のCの問題じゃないか。
MSDNだけじゃなくてWriteFileでググって参考になりそうなコード探せよ。
468 :
デフォルトの名無しさん :2009/01/25(日) 19:33:05
AというRadiobuttonを選択したら チェックボックス(IDC_GREY)にはいっているチェックをとりたいんですが どうしたらいいですか?調べたところSendMessageを使うみたい なんですが・・。 SendMessage(hDlg,BST_UNCHECKED,wParam,lParam); これじゃどのチェックボックス(IDC_GREY)を外すのかわからないとおもうんですが・・。 ご教授お願いします。
CheckDlgButtonとか、SendDlgItemMessageとか、 GetDlgItemでハンドル取ってとか、 どれでも好きなのを使うと良い。
突然初心者が湧いてくるのは何故なんだ?
質問スレだからだろ?
ListViewを詳細表示していて、選択項目が変わったら、新しく選択された項目の内容を取得しようと思っています。 下記のコードを書いてみたのですが、これですと、クリックで選択項目が変わる際は取得できるのですが、 キーボードの矢印キーを使って選択が変わると、何も反応しません。 キーボードの矢印キーを使って選択が変わっても、新しい項目の値を取得できるようにするには、 どうしたら良いのでしょうか?ご教授下さい。 --------------------------------------- case WM_NOTIFY: LPNMHDR lpnmhdr = (LPNMHDR)lp; if( lpnmhdr->hwndFrom == hListView ){ LV_ITEM item; LV_HITTESTINFO lvhti; GetCursorPos((LPPOINT)&lvhti.pt); ScreenToClient(((LPNMLISTVIEW)lp)->hdr.hwndFrom, &lvhti.pt); ListView_HitTest(((LPNMLISTVIEW)lp)->hdr.hwndFrom, &lvhti); char szBuff[100]=""; if (lvhti.flags & LVHT_ONITEM){ item.mask = TVIF_HANDLE | TVIF_TEXT; item.iItem = lvhti.iItem; item.iSubItem = 0; item.pszText=szBuff; item.cchTextMax=sizeof(szBuff); ListView_GetItem(((LPNMLISTVIEW)lp)->hdr.hwndFrom, &item); MessageBox(hWnd,szBuff,"表示",MB_OK); }
んな面倒なことせんでも つLBN_SELCHANGE
ごめん間違えた。 つLVN_ITEMCHANGED
475 :
472 :2009/01/25(日) 20:29:13
>>474 うまくできました〜。
ありがとうございました。
ほんと、面倒な事しすぎててアホでした・・・。
自分が面倒だと思うことは、大抵他人も同じように考えているわけで、 探してみると、もっと楽できる方法が提供されている事が良くある。 そうやって楽しようと調べている内に、色々詳しくなっていくわけだ。
まあメッセージ関連はSpy++で使えそうなのを探した方が楽だけどね。
Spyのウィンドウメッセージが16進数表記でなくてよかったお(´・ω・`)
479 :
472 :2009/01/25(日) 21:25:18
たびたびですいません。 再びListViewに関する質問なのですが、 任意のクリックしたセルを修正できるListViewを作ろうと思っています。 (要するに、MSExcelの様な感じです) ググった結果、 クリックしたセルに上書きする形で、エディタを作ればいい とありました。 なるほど〜〜と思ったのですが、ここで問題発生・・・。 クリックしたセル領域の座標を求める方法が分かりません。 クリックしたセルのItem,SubItemは取得できるので、 CreateWindow("edit",...,(セル幅×SubItem),(セル高さ×Item),セル幅,セル高さ,...) にすれば良いのかと一瞬思ったのですが、 よくよく考えてみると、項目数が多い場合、 ユーザーがListViewをスクロールしている可能性も考えられます。 こういった場合、どのようにしてListViewの上にエディタを作れば良いのでしょうか?? もしくは、実はもっと良い方法があったりするのでしょうか? ご教授下さいませ。
なんでMSDNのLVM_**を調べないの? 馬鹿なの?
ごめんなさい。僕、白痴なんです だから、教えてくださいね
俺、医師免許無いよ?
WaitForSingleObjectで 主スレッドである処理が終わるまで 副スレッドを待機させるのってどうやるんですか
WaitForSingleObjectでWaitを0にして終了するまでループしてればいい
CreateEvent
WaitForSingleObjectでって言ってんだろ
CreateEvent で作ったイベントに対して WaitForSingleObject 使うんだよこのタコ
どうやるもなにもハンドル渡す以外にやる事ないだろ
渡すハンドルもイベントとは限らんしな
_ , -‐-、 / ̄\、 // ̄`\、 / _\//_ _ i| / //:::::_`'|ヽ:. \二`ノ、ー..、 // /'/ ./::ヽ|:::\:.ヽ::::ヽ:\:::\ |' /::/:.:./ |.:|"`、..::ト、:ト;::::|: |:::;::::| |/|:::::;| ::l、| ヽ| ヽl \|: |:::i::::| | |::::;ヽ:::| ,二、 ,二、|: ト ::|:::ト、 ト/:::|`:l ! lj ! lj |:..:| |::|:::|::| `|:::i:ヾ:| " '_ " |::::|'.::::i:::|:::| /|:::|:::|:i:\ ` ノ イ::::|:::::::|:::|:::|、 /:|:::|:::|::|:::|::i:.. ー ´ .|:|:::;|:::i::::|:::|:::::|、 / |:, i .:|ー-──| / |:'|:::|ー─ 、i:::::::| //|l:::.|i::|  ̄` ´  ̄//::;/ l::::::ト、 //|| |:;|ノ| ノ,l::;l/ /:::::::ト、ヽ / ' |/|:|ヾ| |::l'/ /| |:::::|、|:| |l/ |:| ' / ノ// /:|:::|::::i:.| |:| |') ヽ| | (o, ノ/ /:::| :|::::::|:| |:| |l丶 ノ ヽ ,/ ./::::,':: |::::::|i.| |.| | /`iー ' ` ー / /:::::/::/|:::::| |:| || __,/_|__, - ──/ /;::::/:::/ |:::/' |:| | r-'ニ ' /:/::/:::/ |:./ //| Y _ ___ _//// |:/ /' `i_ // ̄  ̄ ̄ ̄l//、// |' .| rl| ! \|n| | ||_ヽ_ ,_, -= '_,7〉 | /、  ̄ ̄ ̄ ,/ |uゝ | '| \ :、 , / ヽ ヽ | \:、 // | | \ ,:/ |
その、虫の触覚みたいな毛は何とかならんのか
アホ毛っていいます。
スレチかもしれませんが・・・ タスクスケジューラを使わずにサスペンドからの復帰を実現しているソフトがありますが、どのような方法を使っているのでしょうか?
アクティブタイマ
>>496 レスありがとうございます。
調べてみます。
ツリービューで、子アイテムから親アイテムのハンドルを取得する方法ってある??
WaitForSingleObjectの第一引数にハンドルの配列の先頭アドレスを渡したら配列全部を待ってくれますか?
マルチプルってのがあったような気がする
そんなばかな
504 :
デフォルトの名無しさん :2009/01/27(火) 10:10:36
SetStretchBltMode(hDC, HALFTONE) StretchBlt(hDC, ...); きれいにビットマップを縮小できません。どうすればいいか分かりますか。
自分で縮小処理を書く
506 :
デフォルトの名無しさん :2009/01/27(火) 10:17:42
507 :
デフォルトの名無しさん :2009/01/27(火) 10:27:59
>>504 原因がわかった。
>Windows 95/98/Me では、この値はサポートされていません。
そんな馬鹿な
__ __ __ __ __ __ __ `i | | i'l_i'l_i' i''´ __`ヽ-ッ _コ l____ i´__`ー-ッ _,,.、 ,! ,! .l l _,,,_ └'´__ ``´ レ┐ ┌─┐ ,!'´ ``´ /,r''´ / 丿 '、'、 l´ __`ヽ-ッi''´__`ヽ-ッ .l l ノ / / / / / ヽ ヾ´ ``'´└'´,,_``'´ l └ ' ,/ ___,,ノ / _,,.r'' / \ `> r'"´ ``ヽS.) l 「´ 「´ _ノ ‘''' ´ `′ └ ''´ ̄``‐-‐'' └ ┘ └‐ '' ´
510 :
デフォルトの名無しさん :2009/01/27(火) 13:42:26
自分で縮小処理を書くしかないようですね。 では、線形補間法を検討してみます。
Direct3Dを使えば高速に処理できるよ。
512 :
デフォルトの名無しさん :2009/01/27(火) 13:54:00
じゃあDirect3D使ってやるからソース教えて
Windows 95/98/Meで動作するバージョンのDirect3Dでおねがいします。
Windows9xで動くDirectXのバージョンていくつだ? 95も考慮するとCPU処理で十分だろ、SSE使えなくなるけど。
95が8までで、98/Meが9までじゃなかったっけ?
WinG?
98はSEもってことね。 馬鹿なお前らでもそれくらいはわかってたよな?
君のレスなんて読まないよ
君のレスなんて読まないよ
君のレスなんて読まないよ
君のレスなんて読まないよ
522 :
デフォルトの名無しさん :2009/01/27(火) 15:58:19
バカのレスなんて読まないよ
読まないよって奴のレスなんて読まないよ
キターーー!!Win32APIスレ伝統芸能”糞レス連打”!
伝統だったのかw
俺が流行らせた
君のレスなんて読まないよ
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
_ ───| |─ R. E. S T A. U R. A. N T ,イ二ヽ| | _ { { ヾ |__r‐z_、-、┌┐ ,.-、┌ i r-、 , ‐ァ \ヘヽ_二フ j / /} ト┘! レ1 | | l└┴──/ / `ー--‐ '´/_/ 」__j レ' L_,|  ̄`ヽ\ 〈 / ┌┐ } } ヽ〉 \ヽ、 ノ/ ``ー---─ '´
知らないならレスしないで下さい。ウザイだけです。
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
ネタレベル低いならレスしないで下さい。オウムレスとか、ですねわかります分とかだけです。
その辺にしてくれ
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
ガスト希望
−−−−−−−−−− 終了 −−−−−−−−−−−
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
次の質問どうぞー
これガキが1,2人でやってんだろ
>>543 そんな判りきった事をわざわざ言わなくていいよ。
オウムレスとか、ですねわかります文とか、ほんとネタレベル低いなこのスレ
ばかいっちゃいけねえ。ガスト待ちの俺はじっと待ってる
すまんがガストのロゴマークは作られてないらしい
たしかにすかいらーくはいい出来だなw
えええええ バーミヤン、すかいらーくと来たらガストだろと思ってたのに。。。 情報、ありがとうございましたλ...
ゲイツの釣りみたいだな
>>543 違うよ。おっさんと爺が2,3人でやっている
本当にその辺にしてくれないか。頼むから。
いや俺じゃないから
俺でもないよ
実はこいつ↓
すいません、全部オレでした
なんかム板のノリじゃなくね?ここだけ
目覚ましと時計を作った例のクソガキが一人で荒らしてるだけだろ。
目覚まし久しぶりだな
562 :
デフォルトの名無しさん :2009/01/27(火) 21:41:21
今アクティブになっているウィンドウのタイトル名を取得したいんだけど どうすればいいの? 言語はVB.NETっす
GetForegroundWindow GetWindowText でいいんすか?
なんだなんだ、目覚し来てるのか? 今度は何してるの?
566 :
デフォルトの名無しさん :2009/01/27(火) 22:03:36
>>564 そんだけじゃわかんねぇよ
ちゃんとソース書いて説明しろよはげ
>>566 さあ目覚ましと時計のソースをうpするんだ
みんなで笑ってあげるからよ
>>566 GivemeAnswer( kokoni, GetWindowText( GetForegroundWindow() ) );
570 :
デフォルトの名無しさん :2009/01/27(火) 22:22:17
>>569 できねぇじゃねぇかよ
俺の貴重な時間を浪費すんじゃねえよはげ
はやく教えろやくずども
念のため言っとくけど、すごいつまんないよ
>>570 くずに聞かないとプログラムも書けないお前はなんなんだ?w
574 :
デフォルトの名無しさん :2009/01/27(火) 22:50:09
WinはGNUじゃないから糞。
>>574 まずはお前が目覚ましと時計のソース出せよ
GNUとか/.民が好きそうだからおいら嫌い
GNUってなに?
いつかWin32APIについて質問したくなったときに後悔するよ
目覚まし時計が流行ってるのか。
このタイミングでなんなんだけどWM_KEYDOWNとかのイベントで、普通に押してるキーを取得するほかに 同時に修飾キーを押してるかどうかをチェックしたいんだけど、メッセージから分かるのはAltキーだけですか?
582 :
デフォルトの名無しさん :2009/01/27(火) 23:24:14
ListViewを詳細表示にしていて、 マウスでListViewをドラッグして複数行選択した後、 マウスをドロップ(っていうのかな?範囲選択が終わって、マウスボタンから指を離す事) した瞬間を捕まえるには、何のメッセージを捕らえれば良いのかな?? ListViewのWM_LBUTTONUPかと思ったんだけど、どうも違うと分かって、 ListViewの親ウィンドウに、WM_NOTIFYで何かのメッセージが飛んで来るんだと思って、 いろいろググってみたけど分からない。 知ってる人がいたら教えて下さい。
>>583 どうやらそれが妥当みたいですね。ありがとうごぜいました。
588 :
562 :2009/01/28(水) 00:35:06
なんか知らないうちにあらされてるな^^;
とりあえず
>>562 以外は偽者なので無視でお願いします。
以下のソースを書いてみたんだけどなぜかGetWindowTextLengthのところで
エラーになっちゃいます。理由わからないのでどうか教えてくださ〜い。
Dim ret As Long
ret = GetForegroundWindow
Me.Text = "タイトル"
If ret <= 0 Then
Exit Sub
End If
Dim length As Integer = GetWindowTextLength(ret)
If length <= 0 Then
Exit Sub
End If
Dim lpStringBuf As System.Text.StringBuilder
lpStringBuf = New System.Text.StringBuilder("", length + 1)
GetWindowText(ret, lpStringBuf, lpStringBuf.Capacity)
Me.TextBox1.Text = lpStringBuf.ToString
GetLastErrorしろ
ドザは荒らすのがよほど好きと見える。
>>588 お前が荒らしたのはバレバレ
今さら善人ぶって「荒らしたのは偽物なので教えてくれ」なんて言っても説得力皆無
DeclareかDllImportAttributeのどっちを使ってるかは知らんが、 そこが間違ってたらそれまでだしなあ。
メモリマップドファイルの逆バージョンって無いんですか? メモリの内容をファイル用APIとかで扱いたい。
>>588 HWNDはIntPtrにするのが普通みたいだけど?
エラーになっちゃうってそのエラーの内容書いたらいいのに
596 :
デフォルトの名無しさん :2009/01/28(水) 11:27:58
インラインアセンブラでMMXを使いベクトル演算
>>596 iyの変化に影響せずixの変化に影響するする変数を
予めループの外で計算しておく。(計算結果は配列に入れる)
浮動小数点は極力使わない。(10000倍とかの係数で対応)
registerとか古臭い書き方ぽいけど それだと0.5倍未満でエイリアス出てくるよ。 MMX使えないとしてもDWORDならx8R8G8B8をx16G16とR16B16に分ければ 16bitまでの加算は同時に2つ行える。 0.5倍未満の縮小をちゃんとやりたいならメモリ食うけど2passスケーリングにすると処理量が減る。
昨日の者ですが、キーイベントに関してまた質問させてもらいます。 WM_KEYDOWNが来た時にプロシージャ内で仮想キーがテンキーパッドにあるキーだった場合に GetKeyState関数を使いNumLockが利いているかを最下位ビットを取るという方法でチェックしています。 しかし、何故か方向キーを連続で押すと最下位ビットが0と1を繰り返します。テンキーでない方でも同様でした。 NumLockが押されているかをチェックするのはどうすればいいんでしょうか?
601 :
デフォルトの名無しさん :2009/01/28(水) 12:27:16
602 :
デフォルトの名無しさん :2009/01/28(水) 12:28:46
補記:MMXは使えません。
ここ最近、質問者が何か異常だな スレ違いにも拘らずここまで答えもらっているのに 返ってきた言葉が「難しくてよくわかりません。例を示してくれませんか?」 よそに池
>>603 日本語が難しくてよくわかりません。例を示してくれませんか?
つまんね
ねんまつ
>>603 知らないならレスしないで下さい。ウザいだけです。。。
>>600 を教えてください。変な流れで質問が流れそうだ・・・
>>607 何処の質問スレいってもそればっかりだな
答えてくれなくなるぞ
>>609 知らないならレスしないで下さい。ウザいだけです。。。
>>610 知らないならレスしないで下さい。ウザいだけです。。。
>>608 仮想キーがテンキーだった場合は
NumLock効いてるんじゃないの?
NumLockがオフだとVK_LEFTとかが来るぞ
case WM_KEYDOWN: if( wp == VK_DOWN ){ bool numlock = ::GetKeyState(wp)&1; ifstream("log.txt") << numlock; } break; 今チェックしてないですけど、こんな感じで
616 :
デフォルトの名無しさん :2009/01/28(水) 15:46:00
ctime等で吐いた文字列を、またtime型などに戻す方法を教えていただけませんか?
>>616 スレ違いと分かっててわざと言ってるだろお前
最新100レスでageて質問してるのは同一人物の荒らしだからスルーしとけ
>>617 知らないならレスしないで下さい。ウザいだけです。。。
しかし、普通に質問してる人に荒らし疑惑をかけて答えないのでは スレの価値がないのだ。荒らしが言いたいことは「Linuxを使え」な のだから。お前たちが改心してLinuxを使わない限り荒らしは収まら ないだろう。どちらにしろ勝ち目のない戦いを挑んでいることになる。 荒らしを気にするあまり答えなければ荒らしの目論見どおりスレは潰 れる。答えれば荒らしでしたーという感じでバカにされる場合もある。 勝ち目はない。 ここはどうだろう?荒らされるに任せて200スレくらいまで伸ばして 「やはりWinAPIは流行ってるな〜」などと悦にいってみるのは?それも 悪くない。たかがAPIごときで75まで伸びるスレは他にないのだから。 Linux、Mac、UNIXのスレが75まで伸びた頃宇宙歴(Linuxに習ってヲタ 風にしてみた)はいくつだろうか?このスレは数千を超えているだろう。 悪くない。実に悪くない。 嵐に負けず、丁寧に一つ一つ質問に答えていくことを推奨する。 ※LinuxはMacでもUNIXでもRubyでも好きに置き換えて読んでいただ きたい。
にわかLinuxヲタうぜーよ どうせコピペに釣られてUbuntuあたりでポチポチしてたクチだろ
622 :
616 :2009/01/28(水) 16:28:22
ごめんなさい… かなり真面目に質問してました…il|iorz そしてsage忘れたのも重ねて謝ります… …スレ違いですか? .NETスレにでも行けばいいですか? そして何この流れ
ctimeの実装は知りませんが、ctimeというインターフェースはC言語というフレームワークにおけるものです。 Win32APIとは異なります。
この板にはLinuxスレが3個ある。すべてネタスレである。Linuxプログ ラミングのみを扱うスレは無い。Linuxプログラマーなどいない。イン ストールしただけで開発者を自称するのである。本来Linuxユーザーは 技術板に来てはいけない人種なのだ。来てしまった以上、荒らすのは 当然の成り行きとも言える。板違いなのである。
>>624 Linux上の開発環境のほとんどはLinux固有のものじゃないだろうがこの低脳
お前がム板から消えろ
627 :
616 :2009/01/28(水) 17:18:18
>>623 あ、ctimeで有る必要は全くなくて、
何か指定したフォーマットで時間を文字列に出力して
文字列を指定したフォーマットで時間に戻すような関数の組み合わせがあれば教えていただけませんか?
SystemTimeToFileTime FileTimeTo??? で最後に time型(time_t ?) に近いもの探して変換代入ぐらいか?
Win32で強いて挙げるとしたら、VarDateFromStr/VarBstrFromDateかな。 文字列からの変換はエラー時の処理の要求が千差万別なので、 APIとして用意するのがあまり現実的でないんだよね。
630 :
616 :2009/01/28(水) 18:26:00
>>614 遅くなってすまん。
GetKeyState(VK_NUMLOCK)
632 :
デフォルトの名無しさん :2009/01/28(水) 19:34:56
>>588でソース書いたものなんですがようやくできました VB、NETだとハンドルはLong型ではなくINT型じゃないと駄目なんですね 勉強になりました ところでウインドウから取得した情報をもとに、そのウインドウがどんなアプリ(エクセルとかメモ帳とかVBとか)なのかという情報を取得することって出来るでしょうか? どなたか教えて下さい よろしくお願いします
ちょっと待った。.NETならハンドルはIntPtr型にしろ。
>>632 つーかInt型でもマーシャリング時にエラー吐くんじゃないかなあ
.NETスレじゃないのでこれ以上触れないが
ウィンドウからプロセスIDが取れる(GetWindowThreadProcessId)
プロセスIDからプロセスを開き、そこからモジュールのパスが取れる(EnumProcessModules)
ttp://support.microsoft.com/kb/175030/ja あとは実行ファイル名のデータベース用意するなりなんなりする
ResourceHackerみたいに実行ファイルからリソースを取得するには?
EnumResourceNamesとか嫁
LoadLibraryExにLOAD_LIBRARY_AS_DATAFILE
638 :
デフォルトの名無しさん :2009/01/28(水) 21:38:05
>>3 のリンクの猫でもわかるのサイトを全部理解しできたらプログラマになれますか?
まだ足りないですか?
プロなら× そうじゃないなら自称プログラマ
まず就職試験受けて合格して入社してください。
プロでも全然理解してないよ 熟知してる人に合うのは稀
全部理解してなくても、プログラマとしてどっかの会社に採用されればプログラマ名乗っていいと思うよ。
>>641 嘘だろ
猫ぐらいの事は熟知してるだろ
さすがに関数全部は覚えちゃいないが
WM_PAINT で BeginPaint せずに GetDC して描画してるコードとかよく見るし・・・ ひでえよ
ValidateRectしてやればいいだろ
そんなのやってるわけないだろ
まともに動いてるならやってあるだろ
やってないんですよ!!! それが!!!
649 :
デフォルトの名無しさん :2009/01/28(水) 22:01:00
>>644 おいおい、Windowはお前と違って忙しいんだから
描画ぐらいWM_PAINTなんてしないで、Windowに好きにやらせろよ
だからつまんないっての
DefWindowProcに流してれば、Begin/EndPaintが呼ばれるので問題ない。 ValidateRectよりは可能性高い気がしないか?
やってないとWM_PAINTがずっと発生してまともに動かないだろ
653 :
デフォルトの名無しさん :2009/01/28(水) 22:04:25
まあ DefWindowProc は呼ばれてた気はするが、 BeginPaint 使わないと上にあるコントロールなどの上から描画しちゃったりするんだよな
お前らよりWindowsプログラミングについて詳しく、ちゃんと根拠ないしアプリケーションの制約があるからそうしてるに決まってるだろ
656 :
デフォルトの名無しさん :2009/01/28(水) 22:14:21
break; が好きなだけだろ
658 :
デフォルトの名無しさん :2009/01/28(水) 22:24:38
>>631 ありがとうございます。それでNumlockがONかどうかは分かりました。
しかし、やりたいのは”押された方向キーがテンキー上のものかどうか”をチェックすることでして、
それだと、まったく意味がありませんでした。このようなチェックってどうやるんでしょうか・・・?
このスレッドは天才チンパンジーシミュレータ「iちゃん」が 言語訓練のために立てたものです。 iちゃんと調教サーバのトランザクションに利用するスレッドなので、 関係するプロセス内のスレッド以外からは書きこまないで下さい。
>>659 VK_LEFT等の値が来たとしたらそれはNumLockがOnのテンキーではあり得ないんじゃないのか
>659 流れを読まずにレスするけど、WM_KEYDOWNのlParamのbit23-16のスキャンコードかbit24を 見るしかないんじゃないかな。
>>661 一応思ってたことができたんで報告。
VK_LEFTはNumlockがオフの時、方向キーとテンキー両方から送られてきます。
用はこの時どちらが押されたのかを調べたかったんですが、どうやらこれらはLPARAMの24ビット目(拡張ビット)を
見ることで分かるようです。
後でこれを見るかもしれない人のために張っときます。
bool numlock = false;
if( wp == VK_RETURN ){
numlock = lp&0x1000000;
}else
if( (wp >= VK_PRIOR && wp <= VK_DOWN) || wp == VK_INSERT || wp == VK_DELETE || wp == VK_CLEAR ){
numlock = (lp&0x1000000)==0;
}
GetKeyState要りませんでした。
>>662 おっとすいません。リロードしてなかったもんで。どうやらその通りでした。
665 :
デフォルトの名無しさん :2009/01/28(水) 23:36:21
>>634 解説ありがとうございました。
とても参考になったんですが、いろいろやってみて
アクティブになったウィンドウのプロセスIDを取得することはできたんですが、
アプリケーション名を取得することがなかなかできませんでした・・・。
すいませんがもう少しヒントをよろしくお願いいたします。
アプリケーション名って何よ
>>665 >プロセスIDからプロセスを開き、そこからモジュールのパスが取れる
OpenProcess→EnumProcessModules→GetModuleFileNameEx
これで全てな気がするが…
ヒントって何だ
>>666 プロセスを生成したモジュールファイル名じゃないの
669 :
デフォルトの名無しさん :2009/01/28(水) 23:52:23
>>668 助かりましたありがとうございます!
いろいろと無知ですみません!
>>668 .NET Frameworkでなんかあったはずだから、VB.NETスレで聞いたほうがいいと思うんだよな。
671 :
668 :2009/01/28(水) 23:58:27
俺もProcessクラスのMainModuleプロパティとか使った方が速いと思うけど わざわざAPIでやりたい物好きのようだから、APIで答えてあげたよ 俺って超優しい
672 :
デフォルトの名無しさん :2009/01/29(木) 00:18:32
>>671 できました!
MainModuleのほうでやりました。
しかし、vb.netにこんなべんりな関数があったなんて。
勉強になりました。ありがとうございました。
673 :
668 :2009/01/29(木) 00:21:46
死ね
おまいらって、コンパイル マルチバイト、海栗 どっちでしている?
676 :
デフォルトの名無しさん :2009/01/29(木) 00:33:02
VSのデフォが海胆になったので海胆で良いと思った。
ChangeDisplaySettingsでセカンダリディスプレイの解像度変えられますか?
知らないから質問しないでください
MSDN読めよ 一行目に書いてあるから
読んだけど分からなかった。ChangeDisplaySettingsExではいけるけど、ChangeDisplaySettings では無理ってこと?
あれが分からないとなると 説明しても理解する努力をしてもらえなさそうだな
理解する能力が欠けてるんだよ 昔はこんなスレなんか無かったからな一人で頑張ったもんさ
683 :
デフォルトの名無しさん :2009/01/29(木) 04:55:19
VistaのMMEエミュレーションはそんなに優しくないらしいよ。 シングルバッファで結構エグい再生の仕方してるせいで waveOutWriteが返って来ずにメッセージループが止まってるとか。 もしくは単にドライバが腐ってるだけとか。
MS謹製ラッパは滅びぬ。何度でもよみがえるさ。
waveOutは、10年前にWindows98でDirectSoundが 標準で再生できるようになった時点で用済みだろ。 昔は腐ったドライバもあったからまだ検討する価値も多少あったが、 完全にエミュレーションとなった今では全く無意味だな。
質問 Hwnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST | WS_EX_LAYERED, "", "", WS_POPUP, x, y, WIDTH, HEIGHT, NULL, NULL, GetModuleHandle(NULL), NULL ); SetLayeredWindowAttributes(Hwnd, RGB(255, 255, 0), 0, LWA_COLORKEY); こういう感じで子ウィンドウの透明化していたんですけど windows2000使っていた時は問題なく動いていたのに、XPsp3だと全く見えなくなってしまいました。 (WS_EX_LAYERED外すとxpでもちゃんと動く) xpでWS_EX_LAYERED指定した時点で見えなくなるのはいいんですが SetLayeredWindowAttributes が全然効いてない感じです。 なにか間違っているところありますかー
>>688 >こういう感じで子ウィンドウの透明化していたんですけど
WS_EX_LAYERED
Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
690 :
デフォルトの名無しさん :2009/01/29(木) 12:41:24
683です. cygwinのdefaultのg=++からMinGWのg++に変更したらあっさり解決しました. Vistaが原因なのかcygwinが原因なのかはわからずじまい.
>>691 XP SP3だけど試しにやってみたら普通にできるが。
なにか別のところでヘマやってるんじゃないの?
>>692 確かに別のところでヘマしてるかもしれませんが
何故か2000では問題なし
どこが怪しいのかもわかりません…
頑張ってデバッグしてくれw
>>693 まずレイヤードウィンドウの単純なテストプログラムでも作って動作確認してみなよ。
それで動くんなら自分のプログラムに不備があるんだろう。
>>695 出かけねばならず後でちょっと作ってみます
たまたまうまく動いていたものが動かなくなった好例ですね
黙れクズ
とクズが申しております。
DCB構造体についてなのですが DCB構造体のメンバ EofChar; /* EOF文字 */ EvtChar; /* イベント通知文字 */ イベント開始とEOFを検出するとどのような動作をするのでしょうか?
マウスホバリングについて _TrackMouseEventが返り値1でdwFlagsがTME_LEAVEの時に WM_MOUSELEAVEがまったく飛んできません。ちなみにTME_HOVERにしたらWM_MOUSEHOVERは飛んできました。 何が悪いんでしょうか?
ListViewを詳細表示にして、 データが入っているカラムの上からドラッグを始めて、 そのまま複数のアイテムを選択する方法ってありますか??
どゆこと?
>>695 さっそく単純な窓のみのプログラムを作ったところ問題無く透明化出来ました。
実は出来ないと言った問題のプログラムは、2枚ウィンドウがあるのです。
2000の時は、一枚目をHIDEにして2枚目を透明化していました。
XPで2枚のウィンドウを表示させるだけのプログラムを作ったところ
一枚目は透明化出来るんですが、2枚目がどうしても出来ません。
制限でもあるのでしょうか?
705 :
702 :2009/01/29(木) 23:08:01
>>703 ListViewは、
右余白(データの入っていない部分)をクリックしてドラッグを始めると、
普通に複数行選択できますが、
データの入っている部分をクリックしてドラッグを始めると、複数行選択できません。
これの解決方法がぜひ知りたいのです。
(結構ググッたのですが、探し出せませんでした。
もしかして不可能だったりするのでしょうか・・・)
>>706 余計なゴミとか削って70行になったけど
ここでいいのかな
うpろだにうpしてリンク貼ろう
すいません
>>701 お願いします。
コード抜粋するとこんな感じです。
case WM_MOUSEMOVE:
if(!hover){
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE;
tme.hwndTrack = hwnd;
hover=true;
_TrackMouseEvent(&tme);
}
break;
case WM_MOUSELEAVE:
hover = false;
break;
コントロールパネルの電源オプションのプロパティの 「システム スタンバイ」「システム 休止状態」についてですが、 このシステムのアイドル時間が今いくらかを知る方法はなかったでしょうか? 起動しているといくら待ってもスタンバイにならないプログラムがあって 原因が何なのか調べたいのですが、毎回1分待っていてはきりがないので……。
>>709 staticだから
てかWM_DESTROYでDestroyWindowって・・
変態
>>712 > WM_DESTROYでDestroyWindow
WM_DESTROYが無限再帰してスタックオーバーフローするのを期待して試したら何も起きなかったw
DestroyWindow側で再入防止の対策してあるのかな
>>712 まだわからないです…
そこを変えまくっても色々変えまくっても変化なく
2000では普通に表示される…
>>712 あ、できました
寝ぼけててちゃんとクラス設定してなかったけど
したら出来ました…こんな簡単なことだったのかあ
助かりました。
でもよくわからないのが、2000だと別に定義済みクラスでもなんでも
普通に透明化出来るんですよね
うpの為の適当なソースなので他のところあまりいじらんでくださいw
ありがとうございました
718 :
デフォルトの名無しさん :2009/01/30(金) 08:29:41
やりたいこととしては、吉里吉里とDXライブラリを同ウィンドウで処理することなんですが WinAPIでウィンドウ作って その子ウィンドウとして、ある.exeファイルを起動(吉里吉里) そして、通常は霧きりで進行、なんらかのフラグでDXライブラリに移行 みたいなのを創造しているのですが、これは可能なのでしょうか? 知識があまり無いので勘違いしまくりの発言だったらすいません
無理
ちなみに無理である理由を細かく挙げてやろうと思ったが 知識がないからと前置きされてしまったので止めた。すまぬ
721 :
デフォルトの名無しさん :2009/01/30(金) 08:52:45
>>720 もしよければあげてもらえると嬉しいです
WinAPIは勉強中なので、これから理解できるかもしれませんし
>>721 最悪自分で吉里吉里のソースいじる根性があるなら不可能じゃないが。
質問文のレベルからするとすっぱり諦めたほうが早いな。
723 :
デフォルトの名無しさん :2009/01/30(金) 08:57:07
吉里吉里を起動、待機させておく そして、もう一つのアプリ起動し、描画先を吉里吉里で作ったウィンドウにする これでできる
WM_MOUSEHOVER時にTrackMouseEvent 呼んでないんじゃない?
>>720 俺も無理である理由に興味あるなぁ。なんで?
>>725 やってもできませんでした・・・。
しかもやっぱりWM_MOUSEHOVERすら来ていないようです。
質問です。 現在のシングルスレッドアプリケーションは下記のような仕組みでやっています。 最初はSleepすら入れなかったため、CPU使用率が100%近くなってしまいました。 で、一番良いのは GetMessageにタイムアウト時間を設定できることなのですが、そういうAPIは無いでしょうか? if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if (::GetMessage(&msg, NULL, 0, 0)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } else { break; } } else { run(); // 内部で1フレーム分時間が経ったかチェックして、経っていなかったら::Sleep(1);して何もせずに制御を返す }
すいません、全体を while(true)で囲んでいるのをコピーするの忘れました。 実際は最初の行の前にwhile(true){があり、最後の行の下に } があります。
そんな馬鹿な
何か解決策があるなら俺も知りたい。 俺では思いつかなかったから、結局スレッド分けてる。
MsgWaitForMultipleObjects で シグナルにならないダミーイベントwait をタイムアウト付きでやるぐらい?
>>732 ありがとうございます。
試してみたところ、なかなか良い動きをしてくれているようです。
MsgWaitForMultipleObjectsExのほうでないと「すでにイベントキューが貯まっているか」を見てくれないようなので、Exを使いました。
シングルスレッドで十分なちょっとしたツールの時など、役に立ちそうです。
734 :
デフォルトの名無しさん :2009/01/30(金) 17:55:10
質問があります。 リストビューを登録しました LV_ITEM item; item.mask = LVIF_TEXT | LVIF_PARAM; item.pszText = "AAA"; item.iItem = 0; item.iSubItem = 0; item.lParam = 1; ListView_InsertItem(hList, &item); 別の関数で item.lParam が持つ値を知りたいです。(この場合、1ですが)ListView_○○とかマクロがあったと思うのですが忘れてしまって困ってます lParamが持ってる値を知る方法知りませんか?
その程度CommCtrl.hでも見ろよ
助言ありがとうございます。 commctrl.hに載ってるのを忘れてました。感謝です。
どーでもいい話だが Sleepは0が基本で、それでもCPU 100%になるようなら 少しずつ値を増やしていく
まあSleep(1)が妥当だよな。そんな速度欲しい処理でもなけりゃ
sleep()笑
sleep()笑ってどういうこと? もっといい方法があるの? それともただの馬鹿なの?死ぬの?
0だと、実行中の同じ優先度のスレッドが無い時は直ぐ戻ってくるからな。 1の方が良いかもしれんね。 それにしてもWindows7SDKになっても未だに、 Sleepの分解能上げたかったら、timeBeginPeriod使えって書いてあるのな。 もう少しMMCSSをプッシュしても罰は当たらないと思うんだ。
742 :
デフォルトの名無しさん :2009/01/30(金) 21:23:08
bitmapのプレビューをdialogに表示するために SetDIBitsToDevice(hdc, 0, 0, //転送先座標 wx, wy, //幅、高さ 0, 0, //転送元座標 0, wy, //走査開始番号、走査線の本数 //ビットマップデータ開始のアドレス (char *)szBuffer + dwOffBits - sizeof(BITMAPFILEHEADER), lpbmp_info, //BITMAPINFO構造体へのポインタ DIB_RGB_COLORS); をやっているのですが、これだとそのままbmpが表示されてしまいます。 たとえば4167×4167の画像を表示しようとするとDialogがくそでかくなってしまいます。 そこでbitmapを「縮小」してプレビューしたいのですが どうしたらいいですか?
StretchDIBits そのサイズだと古いOSとか場合によっては失敗するけどな。
GDI+で縮小すればいいじゃん
GDI+といえば、マルチスレッドのプログラムで動かしてたらフォントの作成あたりで何回か例外で落ちたんだけど、そういうものなの?
タスクトレイにアイコンを表示させようとしてるんですが透明?なアイコンしか表示されません。 トレイにカーソルを持ってくるとソフト名はポップアップされますが見えないんです。 case WM_CREATE: hIcon = LoadIcon(NULL,".rcにあるアイコン名"); nIcon.cbSize = sizeof(NOTIFYICONDATA); nIcon.hWnd = hwnd; nIcon.uID = 0; nIcon.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; nIcon.uCallbackMessage = WM_USER + 1; nIcon.hIcon = hIcon; lstrcpy(nIcon.szTip,"ソフト名"); Shell_NotifyIcon(NIM_ADD,&nIcon); 何がいけないんでしょ?
hIcon = LoadIcon(NULL,".rcにあるアイコン名"); どう考えてもこれだろ
> hIcon = LoadIcon(NULL,".rcにあるアイコン名");
749 :
デフォルトの名無しさん :2009/01/30(金) 22:29:47
*縮小処理はうまくいきました。
>>743 ありがと
で、
GDI+でぐぐっても有益な情報がでてこない。
GDI+について何かおすすめの「本」ありますか?
gdiplusでぐぐれ
>>749 .NET関連の本ぐらいしか日本語で読める書籍はなかろう。
普通にWin32APIとC++理解してるならMSDNの情報だけで概ね事足りると思うが。
>>749 Graphics::DrawImageで幅と高さを指定するだけなのに情報も何も
で、マルチスレッドでGDI+は使っていいのか?悪いのか?
>>755 スレッドセーフに作らなければ何使ってもダメだろ
>>741 Sleep(1);だと10msぐらい返って来なくね?
ちょっと時間掛かりすぎだと思
同じオブジェクト同時に触らないようにして普通にマルチスレッドで使ってるよ。
759 :
デフォルトの名無しさん :2009/01/30(金) 23:04:39
親WindowのEditBoxの文字列を取得するにはどうしたらいいですか? 子Dialogで hDlg_a=GetParent(hDlg); // GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,(int)sizeof(FileName)-1); とかいてもうまくFileNameに文字列が入りません。
>>757-758 d
だったら落ちるプログラムはクリティカルセクションで排他かけてるからDLLが落ちる理由があるならGDI+の内部で性的変数が使われてるのかと思ったんだけど、違うみたいだね。。。
けどシングルスレッドの状態では落ちないんだよなぁ。
なんでマルチスレッドだとフォントの作成辺りで落ちるのか……
フォントファイルに排他ロックでも掛けてるのかねぇ。
ツールバーにボタン以外の独自のウインドウを追加したいのですが、 どうやればよいのでしょうか?
>>760 他人のせいにする前に自分のプログラムを一寸たりとも疑わないその馬鹿さ加減は、
きっと死ぬまで治らないんだろうな。
>>762 当たり前だけど疑ったあとです。
その決め付け癖はきっと死ぬまで治らないんだろうな。
ここで言い合っても机上の空論
>763 自分が無能で発見できないだけということを、一寸たりとも疑わないその馬鹿さ加減は、 きっと死ぬまで治らないんだろうな。
いやでも落ちるまではいかないけど、 マルチスレッドだと性能が落ちるって話は聞いたことある。 個人的にはマルチスレッドとの相性が良くないのかなとは思う。
聞いたことがあるとか、思うとか、 情報のソースがあるわけでもなく、自分で実験したわけでもないのに、 信憑性がまったくないことを既成事実のように語り始めるやつってなんなの?
巨大なテクスチャを2スレッドで小さい画像として沢山 画面に描画したことあるけど普通に性能上がってたけどな。 書き込みだったら性能落ちるかもしれないけど。
>>767 いやでも落ちるまではいかないけど、
マルチスレッドだと性能が落ちるよ。
マルチスレッドとの相性が良くない。
↑こう書かれるより全然ましってことですね。 分かります。
770 :
デフォルトの名無しさん :2009/01/31(土) 00:08:50
親WindowのEditBoxの文字列を取得するにはどうしたらいいですか? 子Dialogで hDlg_a=GetParent(hDlg); GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,(int)sizeof(FileName)-1); とかいてもうまくFileNameに文字列が入りません.
lstrlen
772 :
デフォルトの名無しさん :2009/01/31(土) 01:16:43
質問です。 別々のUSBポートにつなげたキーボードのキーってそれぞれどちら側のキーボードのキーが 押されたかって判別できるものですか?
>>767 知らないのにレスするのはやめてください。うざいです。
ポップアップメニューって普通上下に並ぶけど左右に並べれる?
MF_MENUBREAKをたんまりとぶちこめ
モニターを90度回転しろ
斬新すぎんだろバカ
>>772 XP以降ならRaw Input APIで出来るらしい。
779 :
デフォルトの名無しさん :2009/01/31(土) 10:56:14
780 :
デフォルトの名無しさん :2009/01/31(土) 11:21:37
>>770 なんでGetParentを呼んでるの?
>>770 FileNameが配列じゃなくてポインタだったら、Cの初歩からやり直せ。
782 :
779 :2009/01/31(土) 12:28:42
おーーーい、わかる奴いないのか!?
デバッグは自分でやれ
BackDoorなんてしらんがな
わからないから質問しないで下さい、ウザイだけです。
っていうかネットワークプログラミングスレ池
787 :
779 :2009/01/31(土) 12:39:28
788 :
デフォルトの名無しさん :2009/01/31(土) 12:44:42
char FileName[256]; hDlg_a=GetParent(hDlg); GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,(int)strlen(FileName)); 親DialogのハンドルをとるためにGetParentを呼んでいます。
790 :
デフォルトの名無しさん :2009/01/31(土) 12:47:12
IDC_EDITBOXの定義は?
ああ、親ウィンドウのエディットボックス内の入力されている ファイル名を子ウィンドウで取得させて処理させたいって事か・・・やっと意味がわかった どのタイミングでさせたいの?場合によっては独自定義メッセージでさせちゃうとかすりゃいいのに
まずGetDlgItemしてちゃんとハンドルが取れるか確認しろ
話はそれからだ
>>789 たぶん
>>771 が悪い
GetDlgItemText(hDlg_a,IDC_EDITBOX,FileName,255);
1バイトを笑う者は1バイトに笑われる
正社員?
バッファ長を間違う奴はWin32APIを理解してない証拠。
そんな奴
>>793 には回答する資格は無い。去れ。
256文字超えたら結局0終端じゃなくなるよね。危なくない?
>256文字超えたら結局0終端じゃなくなるよね。危なくない? 妄想でありもしない勝手な仕様を考える馬鹿って、いつになったら絶滅してくれるんだろう?
MSDN読めよハゲ
>>778 ありがとうございます!
調べてみます。
すまん見てきた、文字切り捨てるてのは最後の1文字は0入れてくれるて事?
>>803 文字列終端文字は無視
最大文字数までに文字列を切り詰めちゃうから
最大数-1して終端に終端文字追加しないとだめぽ
なんのための文字数指定だよ
// GetDlgItemText // 戻り値 // 関数が成功すると、バッファへコピーされた文字列の長さ( 終端の NULL を含まない)が TCHAR 単位で返ります。 ということで終端には NULL がある。
>>804 こういう嘘を堂々と言うバカってまだいるんだな
>>806 戻り値じゃなくてこっちだろ
> nMaxCount
> [in] Specifies the maximum length, in TCHARs, of the string to be copied to the buffer pointed to by lpString.
> If the length of the string, including the NULL character, exceeds the limit, the string is truncated.
APIが終端文字まで入れるかどうかってこと?
GetModuleFileNameなどの一部例外を除けばNULLまで入れてくれる こんなの常識
次の患者さんどうぞ〜
814 :
デフォルトの名無しさん :2009/02/01(日) 00:39:22
タブコントロールにリストビューを表示したいんですがうまくいきません タブのファイラーみたいな感じです アドバイスお願いします
回答者はエスパーじゃない。どううまくいかないかを書かないでどうやってアドバイスしろというのか?
817 :
デフォルトの名無しさん :2009/02/01(日) 02:09:09
>>815 エスパーじゃない人はお引き取りください
知らないから質問しないでください。ウザイだけです。
>GetModuleFileNameなどの一部例外を除けばNULLまで入れてくれる GetModuleFileNameって結構使うのにエラー判定は弱いよな……
>>823 MS的な正しい使い方 (最近のSDK Helpには無くなってるが)
まあ、例えば "ファイル名.ini" を作る類いのソフトならこれくらいすべきだと思うけど。
static const TCHAR szManifest[] = TEXT(".manifest");
static const DWORD cchManifest = sizeof(szManifest) / sizeof(szManifest[0]);
ULONG dwChars;
TCHAR ModuleFileNameBuffer[MAX_PATH];
TCHAR lpsz = ModuleFileNameBuffer;
DWORD dwModuleFileNameBufferAvailable = sizeof(ModuleFileNameBuffer) / sizeof(TCHAR);
// Keep trying until we run out of space, or until we fetch the name of the module.
do
{
dwChars = GetModuleFileName(NULL, lpsz, dwModuleFileNameBufferAvailable);
if (dwChars == 0)
ReportLastErrorAndExit("GetModuleFileName(...)");
if ((dwChars + cchManifest) < dwModuleFileNameBufferAvailable)
break;
if (lpsz != ModuleFileNameBuffer)
delete[] lpsz;
dwModuleFileNameBufferAvailable += MAX_PATH;
lpsz = new TCHAR[dwModuleFileNameBufferAvailable];
if (lpsz == NULL)
{
SetLastError(ERROR_OUTOFMEMORY);
ReportLastErrorAndExit("new TCHAR[%lu]", dwModuleFileNameBufferAvailable);
}
}
while (true);
_tcscat(lpsz, szManifest);
最初はスタックで処理しようとするのはなかなか合理的だけどあまり見ないな deleteが必要か判断する手間もあるからかな
俺はATLのCTempBufferみたいなのを作って使ってる
TCHARの配列とかnewで真面目にやっているのを見ると、皆偉いなあとか思う。 俺なんか、いつもreallocで手を抜くからなあ。
828 :
デフォルトの名無しさん :2009/02/01(日) 09:59:00
>>825 現在のC++では、newに失敗すると、例外がthrowされるのでは? それと、
2回目のループが成功で抜けた時に、newで動的に確保したヒープが解放
されない。
ところで、上記だと結果が"ファイル名(.exe含む).manifest"になるけど、
これは意図したものなのか?
>>828 > これは意図したものなのか?
意図も何も、.manifestの仕様を知らないのか?
830 :
デフォルトの名無しさん :2009/02/01(日) 10:33:41
include <iostream> int main(){ CHAR *pNew; while(1){ pNew = new char[65535]; std::cin >> pNew; std::cout << pNwe; } return 0; }
833 :
デフォルトの名無しさん :2009/02/01(日) 11:47:52
>>829-830 manifestなんていつもexeのリソースに組み込んで、単独で配布するなんて
これまで一度もやってないからな。
> まあ、例えば "ファイル名.ini" を作る類いのソフトならこれくらいすべきだと思うけど。
って記述がなければスルーしたんだが。(w
んで、メモリリークするコードを書くのはスルーか?(w
MSのサンプルに吠えてどうしようと言うんだおまい
リークっつうか最後に連結してるんだから開放したらそれこそエラー吐くんじゃね
「Using the Activation Context API」のコピペだな。多少弄ってあるけど。 ちなみに、元コードは後できちんとdeleteしてある。 ……よく見ると、元コードも含めて色々おかしくないか?これ。 「TCHAR lpsz」ってなんやねん。 _tcscatの箇所は元コードだとStringCChCatだけど、 バッファサイズの指定が明らかに変だし。
>>835 そうそう。
_tcscat(lpsz, szManifest);
の後、lpszを使い終わってから、
if (lpsz != ModuleFileNameBuffer)
delete[] lpsz;
だよな。
>>828 今のC++なら、
lpsz = new (std::nothrow) TCHAR[dwModuleFileNameBufferAvailable];
かな。こうすればNULLが返るようになってそのまま使える。
こんな細かいメモリの確保に失敗する状況ではまともにプログラムは動かないので、 メモリの確保に失敗した際のメモリリーク対策など考えてもあまり意味は無い。 そのままプログラムを殺してしまえば、どうせメモリは全て開放されるのだから。 プログラム終了時に自動的に開放されない、 グローバルなリソースに関してはその限りではないが。 場合によっては throw するためのメモリも足らず、即死する事もある。 この場合、スタック巻き戻しすら起こらないので、 いくらかのリソースリークが不可避になこともある。 これは不運だと思うしかないが、 グローバルリソースをできるだけ開放する努力をしなくて良い理由にはならない。 まあ、そうは言っても、簡単に例外安全にできるケースで わざわざ例外安全にしないってのもどうかとは思うけどね。
Cでmalloc&freeに限るね
バッファが足りないときにエラーにするのではなく切り詰める、というAPIのどれかが、 以前は終端に\0をつけなかったらしい。この切り詰めが起こったのをチェックしないと、 バッファオーバーランしてしまう。 んで、あんまりひどいんで必ず\0をつけるようにした、 とかいう話を聞いたことがある。 どのAPIだったか思い出せない・・・まさにこのGetModuleFileNameだったような・・・ しかしこの手のAPIは統一性ないよな。 別のAPIだと、引数に ptr と &bufsiz 渡させて、ptrがNULLのときはbufsizに必要サイズを返す、 ってなってるよな。MultiByteToWideCharとかレジストリ系とか。 ああ、この場合も、bufsizに\0用の領域を含むかどうかがあるか・・・
>>841 1. ptr == NULLのとき
i. 必要サイズを返す
a. 終端の \0 を含める
b. 終端の \0 は含まない
ii. 失敗して 0 を返す
iii. NULL アクセスで落ちる
2. ptr != NULLでバッファが足りないとき
i. 可能な限りコピーして切り詰める
a. 終端に \0 が付く
b. 終端に \0 が付かない
ii. 何もコピーしない
a. *ptr に \0 が入る
b. バッファを一切弄らない
iii. バッファオーバーランする
細かいところだと ERROR_INSUFFICIENT_BUFFER などが設定されるか、とか
まぁ1-iiiと2-iiiは論外だが
846 :
デフォルトの名無しさん :2009/02/01(日) 13:33:06
>>844 速度優先の場合は、落ちるのもありじゃないだろうか?
また馬鹿age厨が来たw
848 :
デフォルトの名無しさん :2009/02/01(日) 13:52:46
おっさんうぜー
引っ込んでろ
antiageing
スルーも何も、サンプルに文句つけてる時点で己の低脳さを露呈してるだけなんだが oldnewthingでclock.aviをハードコードするなとか文句言ってた馬鹿外人みたいだ
> 2回目のループが成功で抜けた時に、newで動的に確保したヒープが解放されない。 この指摘がそもそも頓珍漢だからスルーしただけじゃんw
もうだめだこのスレ
naniwo imasara
857 :
デフォルトの名無しさん :2009/02/01(日) 15:16:12
スライダーの初期値がうまく設定できません。 static HWND hSlider; case WM_INITDIALOG: hSlider=GetDlgItem(hDlg,IDC_SLIDER); SendMessage(hSlider,TBM_SETPOS,(WPARAM)TRUE,(LPARAM)3); //スライダーの値を3にしておく。 これで設定できるはずがうまくいきません。 WM_PAINTなどで他にも設定が必要なのでしょうか?
TBM_SETRANGEしてないからだろ
859 :
デフォルトの名無しさん :2009/02/01(日) 15:28:16
SendDlgItemMessage(hDlg,IDC_SLIDER,TBM_SETRANGE,FALSE,MAKELONG(1,7)); はSETPOSの前で行っています。
ちょっと↓でやってみてよ SendMessage(hSlider,TBM_SETRANGE,FALSE,MAKELONG(1,7));
情報後出しウゼェ
862 :
デフォルトの名無しさん :2009/02/01(日) 17:03:48
static HWND hSlider; case WM_INITDIALOG: hSlider=GetDlgItem(hDlg,IDC_SLIDER); SendMessage(hSlider,TBM_SETRANGE,FALSE,MAKELONG(1,7)); SendMessage(hSlider,TBM_SETPOS,(WPARAM)TRUE,(LPARAM)3); SendDlgItemMessage (hDlg,IDC_SLIDER,TBM_SETTIC,0,3); でうまくいきません 初期値を3にもっていきたいんですが・・。 何かincludeミスもないし・・。
863 :
デフォルトの名無しさん :2009/02/01(日) 17:10:50
自己解決しました。 ありがとうございました。
どういたしまして^^
865 :
デフォルトの名無しさん :2009/02/01(日) 17:43:38
API房は、単価が安くて余裕のない連中ばかりなんだな。(w
リーズナブルと言って頂きたい
これからはアンカーの時代だ。
868 :
デフォルトの名無しさん :2009/02/01(日) 18:41:45
Picute Controlで詳しいページがありましたら 教えてください ねこでもわかるなどを探したのですが 詳しいページがありません。 1.Picute Controlの初期画像の設定 2.Picute Controlの画像変更 などがかいてあるページを探しています。
スタティックコントロールとSS_BITMAPでググって頑張ってくれ
基地害が一匹紛れ込んでるだけなのに、ID無いと荒れるね〜
>>870 あのーーー、先生
Picture Controlとスタティックコントロールの違いって何ですか?
ていうかPicuteって何?
sukillがあるからPicuteあまたなんだよ
Pictureを書けない人が居たなんて、やっぱり小学生が数名混じってたのか。 スレのレベルが急激に低下したのもこの人たちの仕業でしょう。
Pictureの間違いだったの? pie chartを作成するサードパーティ製コントロールの名前かと思った
878 :
デフォルトの名無しさん :2009/02/01(日) 21:16:33
WinAPIでアプリAを作り、Aを起動すると ウィンドウを作成し 次に予め作っておいたアプリBを起動し、それをアプリAの子ウィンドウにする これってどうやればできますでしょうか
頭を使えばできる 方法はいくらでもある
プロセスからアプリBのプロセス探させてプロセスID取得して(ry
882 :
デフォルトの名無しさん :2009/02/01(日) 21:24:58
こんなのAPIの知識でも何でも無いな
>>882 さっきの小学生の方ですね。ご愁傷様です。
885 :
デフォルトの名無しさん :2009/02/01(日) 21:27:06
>>881 ハンドルから子ウィンドウは分かりましたがアプリAを起動するとアプリBの.exeを自動で起動する方法が分かりません
WindowsAPIにはSystem("");っていうのがあるからドスコマンドでも打ってろ CreateProcess
ネタだろ
888 :
デフォルトの名無しさん :2009/02/01(日) 21:29:49
>>886 心のそこから感謝します
これで出来ます
890 :
デフォルトの名無しさん :2009/02/01(日) 21:33:10
やっぱりネタだ
893 :
デフォルトの名無しさん :2009/02/01(日) 21:36:15
>>891-892 なんでそこまで心が歪んでるのかな
自分は分からないところを質問した
分かる人が教えてくれた
俺は教えてもらえて嬉しいし、お礼を言った
これに食いつく意味が分からない
もっと素直な心で生きましょうよ
下手な釣りだなあ
釣られまいと警戒しすぎ(・∀・)クスクス
次の患者さんどうぞ
897 :
デフォルトの名無しさん :2009/02/01(日) 21:45:34
釣りと思うならもういいです もう二度と来ません、さようなら
すばらしい決断だ さようなら
もうだめだこのスレ
レスのこだめだうも
もめだだこうスレの
902 :
デフォルトの名無しさん :2009/02/01(日) 22:13:18
俺
>>893 だけど
>>895 の言うとおりだよ
教えてもらう側としては本当にありがたいスレだから釣りとかよく分からないこと警戒して変な空気作るのは良くないと思う
俺ヤクザだけどって読んじゃった
早速戻って来たんだね
こんばんは
testes
[ ゚д゚]y-~~~ デフラグガカンリョウシマシタ /[へへ うこだだのめもスレ
ところでPictureControlってリソースファイル(.rc)に リソースIDのIDではなく、番号で書き込むイカレタ仕様じゃなかったっけ? こいつ使うとリソースヘッダにある番号振りなおすと大変なことになるんだよね
わざわざ嘘情報を流すお前の方がイカレてるよ
CONTROL 130,IDC_STATIC,"Static",SS_BITMAP,54,115,62,48
#define IDB_BITMAP1 130
ほらなってるやん
この130ってのがそうな
ケッ!糞が!
>>909
へぇ。で、その番号をふり直す意図は?
908ではないが自分も番号振りなおすことはあるな ウィザードで作りっぱなしだと未使用のIDが増えて 収拾つかなくなって保守しずらくなったり 別プロジェクトで作成したダイアログリソースををマージ したりするとき手作業のほうが安心できたりとかするので
>>913 そんときにピクチャーボックスがあるとENDw
869で終わってる話題でなんで50レスも続いてんだw
世の中にはな、終わった話題を蒸し返したがる人が結構いるんだよ。
918 :
デフォルトの名無しさん :2009/02/02(月) 08:10:09
質問があります。 以下のように書式付きメッセージボックスを表示するコードを書いたのですが、 void func(const wchar_t* str, const wchar_t *fmt, ...) { va_list ap; va_start(ap, fmt); wchar_t buf[256]; vswprintf_s(buf, sizeof(buf), fmt, ap); // ★ va_end(ap); MessageBoxW(NULL, buf, str, MB_OK); } ★を実行後にstrに不正な値が書きこまれてしまいます。 どうしてでしょうか? _locale_t locale = _create_locale(LC_CTYPE, "japanese"); _vswprintf_s_l(buf, sizeof(buf), fmt, locale, ap); としてみてもダメでした。
バッファオーバーランだろ
920 :
918 :2009/02/02(月) 08:16:46
>>919 918へのレスですか?
wchar_t buf[256];
_vsnwprintf_s(buf, sizeof(buf), _TRUNCATE, fmt, ap);
としてもダメでした。
適当だけど sizeof(buf)/sizeof(wchar_t) ってことはない?
922 :
918 :2009/02/02(月) 08:31:24
>>921 げげっ。それでうまくいきました。
MSDNに「sizeOfBuffer 出力の buffer のサイズ」と書いてあったので
てっきりバイト数だと思ってました。
ありがとうございました!
最後まで読めばちゃんと書いてあるだろ > In Visual C++ 2005, vswprintf_s conforms to the ISO C Standard for vswprintf, > which requires the second parameter, count, of type size_t.
どうしようもないクズだな
ウワァーッカッチョイーッ
HBITMAPって構造体ですか? これのビットイメージ部だけをどうしたらいいのでしょうか?
ハンドルだと書いてあるだろうがボケ >これのビットイメージ部だけをどうしたらいいのでしょうか? どうしたらいいか?ってどうにでもしろよ! 俺に聞くなよ!
>>927 想像するに、GetDIBits使えばいいと思うよ。
ハンドルはハンドルだ。識別子だ。それ以外のなんでもない。
DIB24ビットでデータだけの1次元配列(DWORD配列)があるのですが これをStretchBltで縮小するにはどのようにしたらいいですか?
何が何でもStretchBlt使いたいなら自力でDIBにマップして使えば
いえ縮小できるならStretchBltじゃなくてもいいです。 どこか参考になるサイトがあったら教えてください
じゃー、StretchDIBits
>>933 今それみてました。
StretchDIBitsまで辿り着くプロセスとして
BITMAPINFO bi;
biの初期化
HBITMAP hb = ::CreateCompatibleBitmap( NULL, 1440, 1080 );
HDC hdc = ::CreateCompatibleDC( NULL );
::SelectObject( hdc, hb );
::StretchDIBits( hdc, 0, 0, 1280, 720, 0, 0, 1440, 1080, dwBuffer, &bi, DIB_RGB_COLORS, SRCCOPY );
と、こんな感じでしょうか?
で、ここから縮小したDIBデータをアクセスしたい場合はどうしたらいいのでしょうか・・・
縮小先のビットマップをCreateDIBSectionでつくればええやん
936 :
デフォルトの名無しさん :2009/02/02(月) 20:22:25
CreateProcessが難しすぎて理解できないんだけど STARTUPINFO pi; PROCESS_INFORMATION si; if(CreateProcess(NULL, "C:\\test.exe", NULL, NULL, FALSE, 0, NULL, NULL, &pi, &si) == 0) MessageBox(NULL,"読み取れない","エラー",MB_OK); ちゃんとC直下にtest.exe作ったけど起動されない。一体どうすれば・・・・
PROCESS_INFORMATION si = {sizoef si};とでも書いておけ。 0初期化しておけばとりあえず動くと思う。
938 :
デフォルトの名無しさん :2009/02/02(月) 20:31:42
>>937 0初期化ってことで
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof (si));
こう変えたら動くようになった、ありがとう、ほんとありがとう
939 :
デフォルトの名無しさん :2009/02/02(月) 20:45:17
>>936 のパス指定は相対パスにする方法ってないんですかね?
保存されるところが一定じゃないだろうからフルパスだとおかしなことになっちゃう。どうすればいいんだろう・・・
>>939 fullpathっていう関数もあるし逆にいえばそれが実行される場所と同じディレクトリは
カレントディレクトリなのでその実行ファイルと同じディレクトリにあればファイル名の指定だけで動く
>>939 つ【SetCurrentDirectory】
PROCESS_INFORMATION si = {sizoef si}; 突込みどころ多すぎだろw
943 :
デフォルトの名無しさん :2009/02/02(月) 21:42:05
おまえらおちつけよ なかよくいこうぜ
ま、コンパイルエラーだわな
typo以外につっこめるところを素人の俺にkwsk
てか、突っ込むべきは
>>936 じゃね
STARTUPINFO pi;
PROCESS_INFORMATION si;
ま、intellisenseが使えりゃ変数名なんてどうでもいいけど
そもそもCreateProcessの第二引数は文字列リテラル駄目だろ
949 :
936 :2009/02/02(月) 22:01:12
>>936 なんですがC直下のプログラムは動いたんですが、違うディレクトリにすると動きません
何か間違ってそうなところはありますでしょうか
"C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\Repton\\Dat\\ADV\\game.exe"
コマンドライン引数のほうは空白混ざってたら""でくくれ
952 :
936 :2009/02/02(月) 22:10:50
>>950 そんなルールがあったのか・・・・
・・・・・まだ、ダメっぽいです
パスは間違ってないし、C直下なら動いたので書き方が悪いと思うんですが・・・
"C:\\Documents" "and" "Settings\\user\\My" "Documents\\Visual" "Studio" "2008\\Projects\\Repton\\Dat\\ADV\\game.exe"
STARTUPINFO si = { sizeof( STARTUPINFO)}; PROCESS_INFORMATION pi = {0}; char szCmdLine[] = "\"C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\Repton\\Dat\\ADV\\game.exe\""; if ( !::CreateProcess( NULL, strCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { MessageBox(NULL,"読み取れない","エラー",MB_OK); } ::CloseHandle( pi.hThread); ::CloseHandle( pi.hProcess);
>>952 コマンドプロンプト出してタイプして動いたら、それと同じように入れればいい。
あと、"は\"のようにエスケープしないとな
なんというバカ。 コマンドラインから実行してみろよ・・・
957 :
デフォルトの名無しさん :2009/02/02(月) 22:13:53
げ、変数名ちがったわ。 strCmdLine → szCmdLine
>>954 どうせならTCHAR対応もやろうぜ。
#include <windows.h>
int main()
{
STARTUPINFO si = { sizeof( STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
TCHAR szCmdLine[] = TEXT("\"C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\Repton\\Dat\\ADV\\game.exe\"");
if ( !::CreateProcess( NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
MessageBox(NULL,TEXT("読み取れない"),0,MB_OK);
}
::CloseHandle( pi.hThread);
::CloseHandle( pi.hProcess);
}
>>959 もとが ANSI だから手を抜いたんだけどね。(笑)
961 :
936 :2009/02/02(月) 22:19:16
できたー! ありがとうございます 頑張ります
パス区切りが/でもいいAPIて結構あるよね。 書くの楽だからそうしてたら逆に\しか許さないので嵌ったな。
おまえら低レベルな質問には一生懸命答えるのなw
低レベルな質問にすら答えられないアホは黙ってな
だって、それでしか自分を顕示できないんだもん
人はなぜ生きるのか
すいません、すいません
>>959 で関数の頭に::付いているのとないのあるんですけど
なぜなんですか?
970 :
936 :2009/02/02(月) 23:41:36
>>968 今、この瞬間
お前は俺に「スレタイ100回読め」といわれる
そのためだけに生まれ、生きてきたんだ
>>969 ついてないのは、単にコピペしただけだから。
>>969 単に統一してないだけ。
詳しくはC++スレへ
>>969 ::を入力するとintellisenseの恩恵に与れる
そりゃ、VC固有だろ
ネット上のサンプルで、関数には::つけてるけど、構造体にはつけないってのが多い気がする。 なんでだー
(: * :)
VCならCtrl+スペースで幸せになれる
('A')
>>976 関数名は被る可能性がある(CWnd::MessageBoxとか)けれど、構造体名なんて滅多に被らないだろ
つまりそういうこと
うめ
そういや今日、梅の花がほころんでいましたよ
ume
986 :
デフォルトの名無しさん :2009/02/03(火) 11:00:03
Borland C++ Compiler 5.5 でいくつかソフト作ってみましたが数10KB〜100KB程度にしかなりません。 他の個人のソフトでは数100KBどころか数MBのモノが普通にありますがあれ、どーしてそこまで大きく なるんですか?
>>986 リソースに画像とか音声を埋め込んだりすれば
すぐにMBくらい超える
>>988 ああ書いた分量だけでなく、そういうことですか。俺個人じゃ書けない量だと不思議に
思ってました…
>>935 CreateCompatibleDCをCreateDIBSectionにするって事ですよね?
そうした場合はStretchDIBitsで縮小したら
縮小したビットデータにはどうやってアクセスすればいいでしょうか?
あ、違ったCreateCompatibleBitmapですね
992 :
デフォルトの名無しさん :2009/02/03(火) 12:31:41
>>990 SelectObjectして、BitBltでしょ
DLLで呼び出し元のハンドルを知りたいんですが、どうすればできますか?
EnumProcessModules
GetObject
ごめんなさい質問変でしたね DLL側が呼び出されたときに自分を呼び出したスレッドハンドルまたはプロセスハンドル を知りたいです。
普通にGetCurrentThread、GetCurrentProcessじゃあかんの?? 悩むまでも無くない??
DLLは呼び出し側のプロセスで動くからな
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。