https://github.com/mRemoteNG/mRemoteNG/wiki/Common-External-Tool-Configurations
'보미아빠, 석이'에 해당되는 글 529건
- 2017.11.23 mremoteng
- 2017.11.10 플랜 변경으로 인한 cpu 100% 를 막아보자
- 2017.11.07 datatype
- 2017.11.06 HADR_SYNC_COMMIT
- 2017.10.16 folder drive map
- 2017.10.13 Powershell - WinNT Provider
- 2017.08.24 vs shortcut
- 2017.07.06 cd 복사
- 2017.06.29 excel 암호풀기
- 2017.06.14 ssms 에러
플랜 변경으로 인한 cpu 100% 를 막아보자
oltp 서버에서는 traceflag 4136을 추천한다.
그러면, 최소한 가만히 있던 서버가 플랜이 바뀌어 cpu 를 100% 사용하는 일은 없어질것이다.
-- ------------------------------------
-- 데이터 생성 시작
-- ------------------------------------
use master
go
if db_id('plan_test') is not null
begin
alter database plan_test set single_user with rollback immediate
drop database plan_test
end
create database plan_test
go
use plan_test
go
if object_id('t_product') is not null
drop table t_product
go
-- 샵2개 상품 각 10만개 , 샵 100만개 넣어도 됨 하고 싶으면...
with temp as
(
select
top 200000 cast(row_number() over (order by (select 1)) as int) idx
, cast('contents other column' as char(400)) contentOtherCol
from sys.objects a1
cross join sys.objects a2
cross join sys.objects a3
cross join sys.objects a4
cross join sys.objects a5
)
select
idx
, cast(abs(checksum(newid())) % 2 as int) shopid
, cast(abs(checksum(newid())) % 100000 as int) productid
, contentOtherCol
into t_product
from temp
go
create clustered index cl_t_product on t_product (shopid, productid)
go
if object_id('t_img') is not null
drop table t_img
go
-- 샵과 상품으로 연결되는 이미지 1만개 type 은 모두 1, 다른거 100만개 넣어도 됨. 하고 싶으면 ...
with temp as
(
select
top 10000 cast(row_number() over (order by (select 1)) as int) idx
, cast('img other column' as char(400)) imgOtherCol
from sys.objects a1
cross join sys.objects a2
cross join sys.objects a3
cross join sys.objects a4
cross join sys.objects a5
)
select
idx
, cast(abs(checksum(newid())) % 2 as int) shopid
, cast(abs(checksum(newid())) % 100000 as int) productid
, 1 as imgType
, imgOtherCol
into t_img
from temp
go
create clustered index cl_t_img on t_img (imgType, shopid, productid)
go
-- ------------------------------------
-- 데이터 생성 끝
-- ------------------------------------
-- ------------------------------------
-- 생성된 데이터 보기 시작
-- ------------------------------------
dbcc show_statistics (t_product, cl_t_product)
dbcc show_statistics (t_img, cl_t_img)
select top 10 * from t_product
select top 10 * from t_img
-- ------------------------------------
-- 생성된 데이터 보기 끝
-- ------------------------------------
if object_id('a') is null
exec ('create proc a as select 1')
go
alter proc a
@shopid int
, @productid int
as
select top 1 *
from
(
select top 1 shopid, productid
from t_img
where
shopid = @shopid
and productid < @productid
and imgType = 1
order by productid desc
) a
left join t_product b
on a.shopid = b.shopid
and a.productid = b.productid
go
-- ------------------------------------
-- 테스트 스크립트 시작
-- ------------------------------------
set statistics io on
-- 정상적인 경우
exec a 1, 10000 -- 1번 shop 은 물건이 많고 상대적으로 많은 쿼리가 들어오고 있음 그러므로 첫 번째 컴파일 될 확율이 높음
exec a 3, 1 -- 이렇게 컴파일된 쿼리는 통계에 없는 변수가 들어와도 충분히 쓸만한 플랜임
-- 첫 변수를 통계에 없는 shopid 를 넣어 컴파일 한 경우, 성능에 심각한 오류가 생김
dbcc freeproccache
exec a 3, 1 -- 3번 샵은 신규 샵으로 상품이 적음 3번 샵과 1번으로 쿼리가 들어오면 아주 좋은 플랜임
exec a 1, 10000 -- 그러나 상품이 많은 1번 샵을 처리하기에는 부적합한 플랜임
-- 플랜 리뷰 및 설명
-- ------------------------------------
-- 테스트 스크립트 끝
-- ------------------------------------
-- ------------------------------------
-- work around 1 (뷰 안의 변수가 쿼리 외부로 나오지 못하게 강제로 막음)
-- ------------------------------------
go
alter proc a
@shopid int
, @productid int
as
select top 1 *
from
(
select top 1 shopid, productid % productid + productid as productid2 -- join 될 컬럼은 가공해 마지막 값만 = 비교가 일어날 수 있도록 바꾸어줌
from t_img
where
shopid = @shopid
and productid < @productid
and imgType = 1
order by productid desc -- sort 는 내부 컬럼을 그대로 이용해 인덱스를 이용한 소트를 사용 가능하게 만들어줌
) a
left join t_product b
on a.shopid = b.shopid
and a.productid2 = b.productid
go
-- ------------------------------------
-- work around 2 (optimize for unknown 으로 histogram 을 보지 못하게 쿼리 하도록 함)
-- ------------------------------------
go
alter proc a
@shopid int
, @productid int
as
select top 1 *
from
(
select top 1 shopid, productid
from t_img
where
shopid = @shopid
and productid < @productid
and imgType = 1
order by productid desc
) a
left outer join t_product b
on a.shopid = b.shopid
and a.productid = b.productid
option (OPTIMIZE FOR unknown)
go
-- ------------------------------------
-- work around 3 (querytraceon 4136을 이용해 ontimize for unknown 과 같은 효과를 query, instance 내 공통 적용 가능하게 만들 수 있음)
(database level 로 적용할 경우 2016부터... ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = OFF;)
(요즘 추세가 azure 가 나오면서 database level 로 옵션을 변경할 수 있게 바뀌고 있음)
(https://www.mssqltips.com/sqlservertip/4245/sql-server-2016-database-scoped-configuration-options/)
-- ------------------------------------
alter proc a
@shopid int
, @productid int
as
select top 1 *
from
(
select top 1 shopid, productid
from t_img
where
shopid = @shopid
and productid < @productid
and imgType = 1
order by productid desc
) a
left outer join t_product b
on a.shopid = b.shopid
and a.productid = b.productid
option (querytraceon 4136)
go
-- ------------------------------------
-- 다른 시나리오
-- ------------------------------------
drop index t_product.cl_t_product
create nonclustered index nc_t_product_01 on t_product (shopid)
if object_id('c') is null
exec ('create proc c as select 1')
go
alter proc c
@shopid int
as
declare @c varchar(max) =N''
select @c = contentOtherCol
from t_product
where shopid = @shopid
select @c
go
alter proc c
@shopid int
as
declare @c varchar(max) =N''
select @c = contentOtherCol
from t_product
where shopid = @shopid
option (OPTIMIZE FOR unknown)
select @c
go
-- ------------------------------------
-- 테스트 스크립트 시작
-- ------------------------------------
-- 문제없는 컴파일 순서
exec c 1
exec c 3
-- 성능이 나빠지는 컴파일 순서
-- 그러나 변수 3에 대해서는 플랜이 좋음 이 모든건 histogram 을 보고 컴파일하는 parameter sniffing 문제임
exec c 3
exec c 1
-- ------------------------------------
-- 테스트 스크립트 끝
-- ------------------------------------
-- ------------------------------------
-- 다른 시나리오
-- ------------------------------------
create nonclustered index nc_t_product_01 on t_product (productid)
go
if object_id('b') is null
exec ('create proc b as select 1')
go
alter proc b
@productid int
as
declare @c varchar(max) =N''
select @c = contentOtherCol
from t_product
where productid < @productid
select @c
go
dbcc freeproccache
set statistics io on
set statistics time on
set statistics profile off
go
alter proc b
@productid int
as
declare @c varchar(max) =N''
select @c = contentOtherCol
from t_product
where productid < @productid
option (OPTIMIZE FOR unknown)
select @c
go
exec b 1
exec b 100000
go
SQL Server data type CLR data type (SQL Server) CLR data type (.NET Framework)
varbinary SqlBytes, SqlBinary Byte[]
binary SqlBytes, SqlBinary Byte[]
varbinary(1), binary(1) SqlBytes, SqlBinary byte, Byte[]
image None None
varchar None None
char None None
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[]
nvarchar SqlChars, SqlString String, Char[]
nchar SqlChars, SqlString String, Char[]
text None None
ntext None None
uniqueidentifier SqlGuid Guid
rowversion None Byte[]
bit SqlBoolean Boolean
tinyint SqlByte Byte
smallint SqlInt16 Int16
int SqlInt32 Int32
bigint SqlInt64 Int64
smallmoney SqlMoney Decimal
money SqlMoney Decimal
numeric SqlDecimal Decimal
decimal SqlDecimal Decimal
real SqlSingle Single
float SqlDouble Double
smalldatetime SqlDateTime DateTime
datetime SqlDateTime DateTime
sql_variant None Object
User-defined type(UDT) None user-defined type
table None None
cursor None None
timestamp None None
xml SqlXml None
HADR_SYNC_COMMIT
https://blogs.msdn.microsoft.com/sql_server_team/troubleshooting-high-hadr_sync_commit-wait-type-with-always-on-availability-groups/
Troubleshooting High HADR_SYNC_COMMIT wait type with Always On Availability Groups
folder drive map
https://www.itworld.com/article/2694895/how-to-map-a-local-folder-to-a-drive-letter-in-windows.html
subst x: C:\Folder\Example
To remove a mapping:
subst x: /D
Powershell - WinNT Provider
http://learningpcs.blogspot.kr/2011/01/powershell-winnt-provider.html
http://www.vistax64.com/powershell/173919-add-built-account-local-group-using-winnt-adsi-provider.htmlwhere Shay Levy added this little nugget:
$group = [ADSI]"WinNT://$env:COMPUTERNAME/Administrators,group"
$group.add("WINNT://NT AUTHORITY/SYSTEM")
I thought okay, great, I've got something to work with. My next step was MSDN to try and find some higher level info to work with. This link came up on Google, but, it really didn't get me far:http://msdn.microsoft.com/en-us/library/aa746534(v=VS.85).aspxI then searched for [ADSI]"WinNT Powershell and got an old Scripting Guys post that got me messing around in the right direction:
http://blogs.technet.com/b/heyscriptingguy/archive/2008/03/11/how-can-i-use-windows-powershell-to-add-a-domain-user-to-a-local-group.aspxAs is much more eloquently noted in the post, if you try and pass the reference to a variable and run a Get-Member cmdlet against it, you don't get very far.
$group = [ADSI]"WinNT://$env:COMPUTERNAME/Administrato
rs,group"
$group | gm
TypeName: Microsoft.PowerShell.Commands.MemberDefinition
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Definition Property System.String Definition {get;}
MemberType Property System.Management.Automation.PSMemberTypes MemberType {get;}
Name Property System.String Name {get;}
TypeName Property System.String TypeName {get;}
Now, if you use the PSBase reference, things start to open up a lot:Likewise, if you go up one level and focus less on a specific group, but, rather, the machine itself, you see a lot of nice things to start playing with:
$machine = [ADSI]"WinNT://$env:COMPUTERNAME"
$machine | gm
TypeName: System.DirectoryServices.DirectoryEntry
Name MemberType Definition
---- ---------- ----------
ConvertDNWithBinaryToString CodeMethod static string ConvertDNWithBinaryToString(psobject deInstance, psobject dnWit...
ConvertLargeIntegerToInt64 CodeMethod static long ConvertLargeIntegerToInt64(psobject deInstance, psobject largeInt...
Division Property System.DirectoryServices.PropertyValueCollection Division {get;set;}
Name Property System.DirectoryServices.PropertyValueCollection Name {get;set;}
OperatingSystem Property System.DirectoryServices.PropertyValueCollection OperatingSystem {get;set;}
OperatingSystemVersion Property System.DirectoryServices.PropertyValueCollection OperatingSystemVersion {get;...
Owner Property System.DirectoryServices.PropertyValueCollection Owner {get;set;}
Processor Property System.DirectoryServices.PropertyValueCollection Processor {get;set;}
ProcessorCount Property System.DirectoryServices.PropertyValueCollection ProcessorCount {get;set;}
Throwing in the PSBase option, I get much more when I run the gm
.$machine.PSBase | gm
TypeName: System.Management.Automation.PSMemberSet
Name MemberType Definition
---- ---------- ----------
Disposed Event System.EventHandler Disposed(System.Object, System.EventArgs)
Close Method System.Void Close()
CommitChanges Method System.Void CommitChanges()
CopyTo Method adsi CopyTo(adsi newParent), adsi CopyTo(adsi newParent, string newName)
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
DeleteTree Method System.Void DeleteTree()
Dispose Method System.Void Dispose()
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetType Method type GetType()
InitializeLifetimeService Method System.Object InitializeLifetimeService()
Invoke Method System.Object Invoke(string methodName, Params System.Object[] args)
InvokeGet Method System.Object InvokeGet(string propertyName)
InvokeSet Method System.Void InvokeSet(string propertyName, Params System.Object[] args)
MoveTo Method System.Void MoveTo(adsi newParent), System.Void MoveTo(adsi newParent, string n...
RefreshCache Method System.Void RefreshCache(), System.Void RefreshCache(string[] propertyNames)
Rename Method System.Void Rename(string newName)
ToString Method string ToString()
AuthenticationType Property System.DirectoryServices.AuthenticationTypes AuthenticationType {get;set;}
Children Property System.DirectoryServices.DirectoryEntries Children {get;}
Container Property System.ComponentModel.IContainer Container {get;}
Guid Property System.Guid Guid {get;}
Name Property System.String Name {get;}
NativeGuid Property System.String NativeGuid {get;}
NativeObject Property System.Object NativeObject {get;}
ObjectSecurity Property System.DirectoryServices.ActiveDirectorySecurity ObjectSecurity {get;set;}
Options Property System.DirectoryServices.DirectoryEntryConfiguration Options {get;}
Parent Property System.DirectoryServices.DirectoryEntry Parent {get;}
Password Property System.String Password {set;}
Path Property System.String Path {get;set;}
Properties Property System.DirectoryServices.PropertyCollection Properties {get;}
SchemaClassName Property System.String SchemaClassName {get;}
SchemaEntry Property System.DirectoryServices.DirectoryEntry SchemaEntry {get;}
Site Property System.ComponentModel.ISite Site {get;set;}
UsePropertyCache Property System.Boolean UsePropertyCache {get;set;}
Username Property System.String Username {get;set;}
As I began poking around I found lots of excellent information that would be good for something like the enumeration phase of a pen test, assuming you could get access to a machine via WinNT provider. It's also flat out useful to find out more about your machine. Here is a treasure trove of information:($user.PSBase.children) | select * -First 1
UserFlags : {66051}
MaxStorage : {-1}
PasswordAge : {48034693}
PasswordExpired : {0}
LoginHours : {255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255}
FullName : {}
Description : {Built-in account for administering the computer/domain}
BadPasswordAttempts : {0}
LastLogin : {7/13/2009 10:53:58 PM}
HomeDirectory : {}
LoginScript : {}
Profile : {}
HomeDirDrive : {}
Parameters : {}
PrimaryGroupID : {513}
Name : {Administrator}
MinPasswordLength : {0}
MaxPasswordAge : {3628800}
MinPasswordAge : {0}
PasswordHistoryLength : {0}
AutoUnlockInterval : {1800}
LockoutObservationInterval : {1800}
MaxBadPasswordsAllowed : {0}
objectSid : {1 5 0 0 0 0 0 5 21 0 0 0 50 63 56 2 145 31 129 81 36 160 45 106 244 1 0 0}
AuthenticationType : Secure
Children : {}
Guid : {D83F1060-1E71-11CF-B1F3-02608C9E7553}
ObjectSecurity :
NativeGuid : {D83F1060-1E71-11CF-B1F3-02608C9E7553}
NativeObject : System.__ComObject
Parent : WinNT://WORKGROUP/MyMachine
Password :
Path : WinNT://WORKGROUP/MyMachine/Administrator
Properties : {UserFlags, MaxStorage, PasswordAge, PasswordExpired...}
SchemaClassName : User
SchemaEntry : System.DirectoryServices.DirectoryEntry
UsePropertyCache : True
Username :
Options :
Site :
Container :
If you don't think this tells you a lot about a given machine, I don't know what to tell you.Pulling back from the hidden wealth of information just discovered and refocusing on the task at hand, I still needed to know how to add a new local user account. I dug up another, perfect script:
http://stackoverflow.com/questions/383390/create-local-user-with-powershell-windows-vistawhich threw out a function:
function create-account ([string]$accountName = "testuser") {
$hostname = hostname
$comp = [adsi] "WinNT://$hostname"
$user = $comp.Create("User", $accountName)
$user.SetPassword("Password1")
$user.SetInfo()
}
Seeing snippets of references I had already looked at--Create, SetPassword, SetInfo--I figured I would go with this and just get things setup. After thinking it through, however, I decided to add a little functionality and write my own function, mainly to enable the specification of UserFlags. If you have never worked with the UserFlags enumeration it can be referenced here:http://msdn.microsoft.com/en-us/library/Aa772300Here is the main segment worth focusing on as outlined in the typedef for this enum:
typedef enum {
ADS_UF_SCRIPT = 1, // 0x1
ADS_UF_ACCOUNTDISABLE = 2, // 0x2
ADS_UF_HOMEDIR_REQUIRED = 8, // 0x8
ADS_UF_LOCKOUT = 16, // 0x10
ADS_UF_PASSWD_NOTREQD = 32, // 0x20
ADS_UF_PASSWD_CANT_CHANGE = 64, // 0x40
ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 128, // 0x80
ADS_UF_TEMP_DUPLICATE_ACCOUNT = 256, // 0x100
ADS_UF_NORMAL_ACCOUNT = 512, // 0x200
ADS_UF_INTERDOMAIN_TRUST_ACCOUNT = 2048, // 0x800
ADS_UF_WORKSTATION_TRUST_ACCOUNT = 4096, // 0x1000
ADS_UF_SERVER_TRUST_ACCOUNT = 8192, // 0x2000
ADS_UF_DONT_EXPIRE_PASSWD = 65536, // 0x10000
ADS_UF_MNS_LOGON_ACCOUNT = 131072, // 0x20000
ADS_UF_SMARTCARD_REQUIRED = 262144, // 0x40000
ADS_UF_TRUSTED_FOR_DELEGATION = 524288, // 0x80000
ADS_UF_NOT_DELEGATED = 1048576, // 0x100000
ADS_UF_USE_DES_KEY_ONLY = 2097152, // 0x200000
ADS_UF_DONT_REQUIRE_PREAUTH = 4194304, // 0x400000
ADS_UF_PASSWORD_EXPIRED = 8388608, // 0x800000
ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION = 16777216 // 0x1000000
} ADS_USER_FLAG_ENUM;
This script can give you a taste of a few others ways to play with the UserFlags enum and the -bor operator if you want to be more precise in your settings:http://poshcode.org/685As noted in this post there is a little usage of the binary comparison operators. You can get more detail (plus some examples) by typing
Get-Help about_comparison operators
in your shell.Once I had all this set up I arrived at this script:
function Add-LocalUser
{
param(
[Parameter(Mandatory = $true, Position = 1)]
[String]
$UserName,
[Parameter(Mandatory = $true, Position = 2)]
[String]
$Password,
[Parameter(Mandatory = $false, Position = 3)]
[Int32]
$UserFlags,
[Parameter(Mandatory = $false, Position = 4)]
[String]
$ComputerName = $env:COMPUTERNAME
)
$comp = [adsi] "WinNT://$ComputerName"
$user = $comp.Create("User", $UserName)
$user.SetPassword($Password)
if($UserFlags)
{
$user.UserFlags = $UserFlags
}
$user.SetInfo()
}
To use this function I do this: Add-LocalUser User P@55w0RD (65536 + 64)
To add the user to a group, I can go back to the boiler plate code from the original Scripting Guys post and put this right where I need it.vs shortcut
<주석>-------------------------------------------------------------------
Ctrl+K, Ctrl+C 선택 영역 주석 처리 (.NET 2003, 2005)
Ctrl+K, Ctrl+U 선택 영역 주석 없앰 (.NET 2003, 2005)
<이동>------------------------------------------------------------------------------
Ctrl + F2 현재 라인에 북마크 지정/해제
F2 지정된 다음 북마크로 이동
Ctrl + Shift + F2 지정된 모든 북마크를 해제
Ctrl-K, Ctrl-H 바로가기 설정. ( 작업목록 창에서 확인가능 )
Ctrl-K,K 북마크 설정 / 해제
Ctrl-K,L 북마크 모두 해제
Ctrl-K,N 북마크 다음으로 이동
Ctrl-K,P 북마크 이전으로 이동
Ctrl-K,C 선택한 블럭을 전부 코멘트
Ctrl-K,U 선택한 블럭을 전부 언코멘트(코멘트 해제)
Ctrl + ] 또는 E {괄호의 짝을 찾아줌
Ctrl + J, K #ifdef 와 #endif의 짝을 찾아줌
Ctrl+ -, Ctrl+Shift+ -
현재 커서를 기억하는 Ctrl+F3(VS6에서), Ctrl+K,K(VS7에서) 와는 달리 사용자가 별도로 입력을 해주는건 없고, 단지 이전에 커서가 있었던곳으로 위 키를 누를 때마다 이동된다. (shift를 이용하면 역순)
Ctrl-F12 커서위치 내용의 선언(.h)으로 이동
F12 커서위치 내용의 정의(.cpp)로 이동
Shift+Alt+F12 빠른기호찾기
Ctrl-Shift-G #include "파일명" 파일로 바로 직접이동
F8 After a build failure hit
Shift+F8 거꾸로
Ctrl + D 툴바의 찾기 Editbox로 이동
<편집>------------------------------------------------------------------------------
Ctrl-F 찾기 대화상자
Ctrl-H 바꾸기 대화상자
Ctrl-Shift-F 파일들에서 찾기 대화상자
Ctrl-Shift-H 파일들에서 바꾸기 대화상자
Ctrl-G 해당 줄로 가기 (별로 필요없음)
Ctrl-K,Ctrl-F 선택된 영역 자동 인덴트 (VS6의 Alt-F8기능)
Ctrl-Shift-Spacebar 함수와매개변수설명이 안나올경우, 강제로 나오게
Ctrl+Alt+T
Ctrl+Spacebar 멤버목록 팝업창이 나타납니다
Ctrl+Shift+R (키보드 레코딩)
가끔 연속된 연속기만으로는 부족한경우가 있다.
이때 Ctrl+Shift+R 을 누르고, 원하는 동작들을 수행후,
다시 Ctrl+Shift+R을 눌러 종료한다.
이 중간동작을 원하는 위치에서 반복하고 싶다면
Ctrl+Shift+P 를 누른다.
Ctrl+Shift+V (히스토리 붙이기)
Ctrl-Z 이전으로 되돌리기
Ctrl-Shift-Z 되돌렸다, 다시 복구하기
Ctrl + I 문자열 입력, 점진적으로 문자열 찾기
Ctrl + F3 현재 커서에 있는 문자열 찾기
Ctrl+Shift+F3 거꾸로 찾기
F3 찾은 문자열에 대한 다음 문자열 (Next Search)
Ctrl + H 문자열 찾아 바꾸기 (Replace)
Ctrl + Left/Right 단어 단위로 이동
Ctrl+[Delete|Backspace] 단어 단위로 삭제
Ctrl + L 한 라인을 클립보드로 잘라내기
Ctrl + Shift + L 한 라인을 삭제
Alt + Mouse 세로로 블록 설정하기 (마우스로)
Ctrl + Shift + F8 세로로 블록 설정하기 (키보드로),
취소할 때는 Esc키를 눌러야 함
블록설정>>Tab 선택된 블록의 문자열을 일괄적으로 들여쓰기(Tab)
블록설정>>Shift + Tab선택된 블록의 문자열을 일괄적으로 내어쓰기
Alt+F8>> [Tab|Shift + Tab]
들여쓰기 자동 조정
Ctrl + T 현재 커서에 있는 변수/함수에 대한 Type이
Tooltip 힌트 창에 나타남
Ctrl + Alt + T 멤버 변수/함수 목록에 대한 팝업 창이 나타남
Ctrl + Shift + T 공백/콤마/파이프/괄호 등을 기준으로
좌우 문자열을 Swap시킴
Ctrl + Shift + 8 문단기호 표시/감추기 :
Tab은 ^, Space는 .으로 표시
Ctrl + D 툴바의 찾기 Editbox로 이동
Ctrl + Up/Down 커서는 고정시키고 화면만 스크롤 시키기
CTRL+SHIFT+T 커서 위치의 단어와 앞 단어가 서로 교체
ALT+SHIFT+T 커서 위치의 한줄과 윗줄이 서로 교환
Ctrl + Shift + U 소문자가 대문자로 둔갑.
Ctrl + U 대문자를 소문자로 변경
Ctrl + Shift + F8 블럭설정
Ctrl + C, C That copies the current line.
Ctrl+K, Ctrl+C Automatically commented.
Ctrl+K, Ctrl+U Uncommented.
<디버그/빌드>-----------------------------------------------------------------------
F5 디버그 시작
F9 디버그 브렉포인트 지정/해제
Ctrl-F9 현위치 설정된 브렉포인트 해제
Ctrl-Shift-F9 현재 소스파일에 지정된 모든 Breakpoint 해제
Shift-F5 디버그 빠져나오기
Ctrl-F10 커서가 있는곳까지 실행
Shift-F11 현 함수를 빠져나감.
Shift+Ctrl+B 전체 빌드(프로젝트가 여러개있을경우 모두 빌드)
Alt+B, C 해당 프로젝트만 정리.
Alt+B, U 해당 프로젝트만 빌드.
Ctrl-F7 현 파일만 컴파일 : 현 프로젝트만 빌드
Ctrl-F5 프로그램 시작
Shift + F9 디버그 모드에서 추가하고픈 변수나 등등
앞에 커서를 위치 시킨후 Shift+F9를 누르면
Watch Window에 자동으로 추가.
<창관련>
Shift+Alt+Enter 전체 창 (토글 됨)
F4 속성창 보여준다.
Ctrl+Alt+X 리소스에디터 툴박스창
Ctrl+Alt+K 작업목록 창.
Ctrl + Tab Edit하고 있는 Child Window 간의 이동
Ctrl + F4 현재 Edit하고 있는 Child Window를 닫기
Ctrl-M, Ctrl-L 소스파일의 함수헤더만 보이기 (구현부는 감추고)
Ctrl-M, Ctrl-M 현재 커서가 위치한 함수를 접는다/편다. (토글 키)
Ctrl+R, Ctrl+R Word Wrap
Ctrl+M+L 편집.전체개요표시숨기기
Ctrl+M+H 편집.선택영역숨기기
Ctrl+M+U 편집.현재숨기기중지
Alt + F7 Project Setting
excel 암호풀기
http://m.blog.naver.com/sindong14/220408019666
헐~ 이렇게 쉬울수가....2016까지 다 풀립니다. (테스트 완료)