Skip to content

Commit 5dfe140

Browse files
committed
source code of 0.10.1
0 parents  commit 5dfe140

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+71187
-0
lines changed

.gitattributes

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
###############################################################################
2+
# Set default behavior to automatically normalize line endings.
3+
###############################################################################
4+
* text=auto
5+
6+
###############################################################################
7+
# Set default behavior for command prompt diff.
8+
#
9+
# This is need for earlier builds of msysgit that does not have it on by
10+
# default for csharp files.
11+
# Note: This is only used by command line
12+
###############################################################################
13+
#*.cs diff=csharp
14+
15+
###############################################################################
16+
# Set the merge driver for project and solution files
17+
#
18+
# Merging from the command prompt will add diff markers to the files if there
19+
# are conflicts (Merging from VS is not affected by the settings below, in VS
20+
# the diff markers are never inserted). Diff markers may cause the following
21+
# file extensions to fail to load in VS. An alternative would be to treat
22+
# these files as binary and thus will always conflict and require user
23+
# intervention with every merge. To do so, just uncomment the entries below
24+
###############################################################################
25+
#*.sln merge=binary
26+
#*.csproj merge=binary
27+
#*.vbproj merge=binary
28+
#*.vcxproj merge=binary
29+
#*.vcproj merge=binary
30+
#*.dbproj merge=binary
31+
#*.fsproj merge=binary
32+
#*.lsproj merge=binary
33+
#*.wixproj merge=binary
34+
#*.modelproj merge=binary
35+
#*.sqlproj merge=binary
36+
#*.wwaproj merge=binary
37+
38+
###############################################################################
39+
# behavior for image files
40+
#
41+
# image files are treated as binary by default.
42+
###############################################################################
43+
#*.jpg binary
44+
#*.png binary
45+
#*.gif binary
46+
47+
###############################################################################
48+
# diff behavior for common document formats
49+
#
50+
# Convert binary document formats to text before diffing them. This feature
51+
# is only available from the command line. Turn it on by uncommenting the
52+
# entries below.
53+
###############################################################################
54+
#*.doc diff=astextplain
55+
#*.DOC diff=astextplain
56+
#*.docx diff=astextplain
57+
#*.DOCX diff=astextplain
58+
#*.dot diff=astextplain
59+
#*.DOT diff=astextplain
60+
#*.pdf diff=astextplain
61+
#*.PDF diff=astextplain
62+
#*.rtf diff=astextplain
63+
#*.RTF diff=astextplain

.gitignore

+190
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
4+
# User-specific files
5+
*.suo
6+
*.user
7+
*.sln.docstates
8+
9+
# Build results
10+
[Dd]ebug/
11+
[Dd]ebugPublic/
12+
[Rr]elease/
13+
x64/
14+
build/
15+
bld/
16+
[Bb]in/
17+
[Oo]bj/
18+
19+
# Roslyn cache directories
20+
*.ide/
21+
22+
# MSTest test Results
23+
[Tt]est[Rr]esult*/
24+
[Bb]uild[Ll]og.*
25+
26+
#NUNIT
27+
*.VisualState.xml
28+
TestResult.xml
29+
30+
# Build Results of an ATL Project
31+
[Dd]ebugPS/
32+
[Rr]eleasePS/
33+
dlldata.c
34+
35+
*_i.c
36+
*_p.c
37+
*_i.h
38+
*.ilk
39+
*.meta
40+
*.obj
41+
*.pch
42+
*.pdb
43+
*.pgc
44+
*.pgd
45+
*.rsp
46+
*.sbr
47+
*.tlb
48+
*.tli
49+
*.tlh
50+
*.tmp
51+
*.tmp_proj
52+
*.log
53+
*.vspscc
54+
*.vssscc
55+
.builds
56+
*.pidb
57+
*.svclog
58+
*.scc
59+
60+
# Chutzpah Test files
61+
_Chutzpah*
62+
63+
# Visual C++ cache files
64+
ipch/
65+
*.aps
66+
*.ncb
67+
*.opensdf
68+
*.sdf
69+
*.cachefile
70+
71+
# Visual Studio profiler
72+
*.psess
73+
*.vsp
74+
*.vspx
75+
76+
# TFS 2012 Local Workspace
77+
$tf/
78+
79+
# Guidance Automation Toolkit
80+
*.gpState
81+
82+
# ReSharper is a .NET coding add-in
83+
_ReSharper*/
84+
*.[Rr]e[Ss]harper
85+
*.DotSettings.user
86+
87+
# JustCode is a .NET coding addin-in
88+
.JustCode
89+
90+
# TeamCity is a build add-in
91+
_TeamCity*
92+
93+
# DotCover is a Code Coverage Tool
94+
*.dotCover
95+
96+
# NCrunch
97+
_NCrunch_*
98+
.*crunch*.local.xml
99+
100+
# MightyMoose
101+
*.mm.*
102+
AutoTest.Net/
103+
104+
# Web workbench (sass)
105+
.sass-cache/
106+
107+
# Installshield output folder
108+
[Ee]xpress/
109+
110+
# DocProject is a documentation generator add-in
111+
DocProject/buildhelp/
112+
DocProject/Help/*.HxT
113+
DocProject/Help/*.HxC
114+
DocProject/Help/*.hhc
115+
DocProject/Help/*.hhk
116+
DocProject/Help/*.hhp
117+
DocProject/Help/Html2
118+
DocProject/Help/html
119+
120+
# Click-Once directory
121+
publish/
122+
123+
# Publish Web Output
124+
*.[Pp]ublish.xml
125+
*.azurePubxml
126+
## TODO: Comment the next line if you want to checkin your
127+
## web deploy settings but do note that will include unencrypted
128+
## passwords
129+
#*.pubxml
130+
131+
# NuGet Packages Directory
132+
packages/*
133+
## TODO: If the tool you use requires repositories.config
134+
## uncomment the next line
135+
#!packages/repositories.config
136+
137+
# Enable "build/" folder in the NuGet Packages folder since
138+
# NuGet packages use it for MSBuild targets.
139+
# This line needs to be after the ignore of the build folder
140+
# (and the packages folder if the line above has been uncommented)
141+
!packages/build/
142+
143+
# Windows Azure Build Output
144+
csx/
145+
*.build.csdef
146+
147+
# Windows Store app package directory
148+
AppPackages/
149+
150+
# Others
151+
sql/
152+
*.Cache
153+
ClientBin/
154+
[Ss]tyle[Cc]op.*
155+
~$*
156+
*~
157+
*.dbmdl
158+
*.dbproj.schemaview
159+
*.pfx
160+
*.publishsettings
161+
node_modules/
162+
163+
# RIA/Silverlight projects
164+
Generated_Code/
165+
166+
# Backup & report files from converting an old project file
167+
# to a newer Visual Studio version. Backup files are not needed,
168+
# because we have git ;-)
169+
_UpgradeReport_Files/
170+
Backup*/
171+
UpgradeLog*.XML
172+
UpgradeLog*.htm
173+
174+
# SQL Server files
175+
*.mdf
176+
*.ldf
177+
178+
# Business Intelligence projects
179+
*.rdl.data
180+
*.bim.layout
181+
*.bim_*.settings
182+
183+
# Microsoft Fakes
184+
FakesAssemblies/
185+
186+
# LightSwitch generated files
187+
GeneratedArtifacts/
188+
_Pvt_Extensions/
189+
ModelManifest.xml
190+
/do/err.txt

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# audio-router
2+
Routes audio stream from a program to desired audio device.
+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
// DialogMessageHook.cpp: implementation of the CDialogMessageHook class.
2+
//
3+
//////////////////////////////////////////////////////////////////////
4+
5+
#include "DialogMessageHook.h"
6+
7+
//////////////////////////////////////////////////////////////////////
8+
// Construction/Destruction
9+
//////////////////////////////////////////////////////////////////////
10+
11+
HHOOK CDialogMessageHook::m_hHook = NULL;
12+
THWNDCollection CDialogMessageHook::m_aWindows;
13+
14+
//////////////////
15+
// Note that windows are enumerated in top-down Z-order, so the menu
16+
// window should always be the first one found.
17+
// taken from code written by by Paul DiLascia,
18+
// C++ Q&A, MSDN Magazine, November 2003
19+
//
20+
static BOOL CALLBACK MyEnumProc(HWND hwnd, LPARAM lParam)
21+
{
22+
TCHAR buf[16];
23+
GetClassName(hwnd, buf, sizeof(buf) / sizeof(TCHAR));
24+
if (_tcsncmp(buf, _T("#32768"), 6) == 0) { // special classname for menus
25+
*((HWND*)lParam) = hwnd;
26+
return FALSE;
27+
}
28+
return TRUE;
29+
}
30+
31+
// Hook procedure for WH_GETMESSAGE hook type.
32+
//
33+
// This function is more or less a combination of MSDN KB articles
34+
// Q187988 and Q216503. See MSDN for additional details
35+
LRESULT CALLBACK CDialogMessageHook::GetMessageProc(int nCode,
36+
WPARAM wParam, LPARAM lParam)
37+
{
38+
// If this is a keystrokes message, pass it to IsDialogMessage for tab
39+
// and accelerator processing
40+
LPMSG lpMsg = (LPMSG) lParam;
41+
42+
// check if there is a menu active
43+
HWND hMenuWnd = NULL;
44+
EnumWindows(MyEnumProc, (LPARAM)&hMenuWnd);
45+
46+
if (hMenuWnd == NULL &&
47+
(nCode >= 0) &&
48+
PM_REMOVE == wParam &&
49+
(lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST))
50+
{
51+
HWND hWnd, hActiveWindow = GetActiveWindow();
52+
THWNDCollection::iterator it = m_aWindows.begin();
53+
54+
// check each window we manage to see if the message is meant for them
55+
while (it != m_aWindows.end())
56+
{
57+
hWnd = *it;
58+
59+
if (::IsWindow(hWnd) &&
60+
::IsDialogMessage(hWnd, lpMsg))
61+
{
62+
// The value returned from this hookproc is ignored, and it cannot
63+
// be used to tell Windows the message has been handled. To avoid
64+
// further processing, convert the message to WM_NULL before
65+
// returning.
66+
lpMsg->hwnd = NULL;
67+
lpMsg->message = WM_NULL;
68+
lpMsg->lParam = 0L;
69+
lpMsg->wParam = 0;
70+
71+
break;
72+
}
73+
74+
it++;
75+
}
76+
}
77+
78+
// Passes the hook information to the next hook procedure in
79+
// the current hook chain.
80+
return ::CallNextHookEx(m_hHook, nCode, wParam, lParam);
81+
}
82+
83+
extern CAppModule _Module;
84+
85+
HRESULT CDialogMessageHook::InstallHook(HWND hWnd)
86+
{
87+
// make sure the hook is installed
88+
if (m_hHook == NULL)
89+
{
90+
m_hHook = ::SetWindowsHookEx(WH_GETMESSAGE,
91+
GetMessageProc,
92+
_Module.m_hInst,
93+
GetCurrentThreadId());
94+
95+
// is the hook set?
96+
if (m_hHook == NULL)
97+
{
98+
return E_UNEXPECTED;
99+
}
100+
}
101+
102+
// add the window to our list of managed windows
103+
if (m_aWindows.find(hWnd) == m_aWindows.end())
104+
m_aWindows.insert(hWnd);
105+
106+
return S_OK;
107+
}
108+
109+
HRESULT CDialogMessageHook::UninstallHook(HWND hWnd)
110+
{
111+
HRESULT hr = S_OK;
112+
113+
// was the window found?
114+
if (m_aWindows.erase(hWnd) == 0)
115+
return E_INVALIDARG;
116+
117+
// is this the last window? if so, then uninstall the hook
118+
if (m_aWindows.size() == 0 && m_hHook)
119+
{
120+
if (!::UnhookWindowsHookEx(m_hHook))
121+
hr = HRESULT_FROM_WIN32(::GetLastError());
122+
123+
m_hHook = NULL;
124+
}
125+
126+
return hr;
127+
}

0 commit comments

Comments
 (0)